Minggu, 22 Februari 2009

Mengendalikan Range

Mengendalikan Range merupakan hal yang penting dalam pemograman VBE. Mari kita mulai, pertama buatlah sebuah file contoh.xls. Kemudian buatlah sebuah makro dengan cara Record New Maro,



beri nama macro tersebut dengan nama Coba, dan shortkey tombol q di keyboard Anda.



ketikan kata coba pada range A1



lalu Stop Recording Macro



Lihat hasil pencatatan pada Visual Basic Editor Excell Anda,



kode Macros akan tertulis pada module1,



Range("A1").Select

Merupakan perintah pada VB Excell untuk memilih range A1, bila “A1” diubah menjadi “A4” maka kata “coba” akan dituliskan pada range A4.

ActiveCell.FormulaR1C1 = "coba"

Berarti pada sel aktif yang telah dipilih (select) rumus (Formula) “coba” akan dituliskan. Activecell sendiri menunjuk pada sel dimana kursor aktif.



Rangkaian kode di atas dapat disederhanakan dengan kode seperti berikut ;



bila dijalankan, maka kode ini akan menghasilkan yang sama dengan sebelumnya.



Menggunakan Range dengan Cell

Kita dapat membuat sebuah range pada Excell sebagai “titik pusat” lalu dengan bantuan Cells(Rowindex, Columnlindex)., kita dapat menempatkan sebuah nilai atau rumus di sekitar Range yang menjadi pusat. Sebagai contoh tuliskan kode ini pada Sub Coba()

Range("D5").Cells(1, 1).Value = "pusat"

Range("D5").Cells(0, 1).Value = "atas"

Range("D5").Cells(2, 1).Value = "bawah"

Range("D5").Cells(1, 0).Value = "kanan"

Range("D5").Cells(1, 2).Value = "kiri"



jalankan program, maka hasilnya akan seperti demikian;



dapat dilihat Range(“D5”).Cells(1,1) adalah Range D5 yang menjadi pusat.

Bila Range tidak disebutkan maka secara default , Range yang menjadi titik pusat adalah Range A1. Anda harus berhati-hati ketika memilih range-range yang berada di tepi, seperti A1, A2, B1, C1, dst. Sebab tidak ada lagi range di atas atau di tepi kanan range-range tersebut.



Bila kita menginginkan sel yang menjadi titik pusat adalah sel dimana kursor aktif, maka kode berikut dapat digunakan

ActiveCell.Offset(0, 0).Value = "pusat"

ActiveCell.Offset(0, 1).Value = "kiri"

ActiveCell.Offset(0, -1).Value = "kanan"

ActiveCell.Offset(1, 0).Value = "bawah"

ActiveCell.Offset(-1, 0).Value = "atas"



buka Sheet1, pilih Range D5



lalu tekan Ctrl +q, maka akan menghasilkan



kemudian pilih range H15, tekan Ctrl+q maka akan dihasilkan,



Selain dengan kode diatas, terdapat cara lain



bila dijalankan maka hasil yang sama akan didapatkan.

Menunjuk sel pada worksheet tertentu

Karena ditulis di module maka kode-kode diatas bekerja pada Worksheet yang aktif. Artinya bila Sheet1 yang sedang tebuka maka program aka dijalankan pada Sheet1. Bagaimana bila kita menginginkan agar range yang ditunjuk berada di dalam sheet tertentu. Caranya cukup dengan menuliskan nama worksheet di depan range, sebagai contoh:

Sheet1.Range(“A1”).value=”oke”

Akan mengacu pada range A1 pada Worksheet Sheet1, bila kita menginginkan agar range A1 pada Sheet2 maka ganti kode sebelumnya dengan:

Sheet2.Range(“A1”).value=”oke”

Cara penulisan lain juga dapat dilakukan, contohnya:

Set Pesan = Sheets("sheet3").Range("A1")

Set Pesan = Sheets(2).Range("A1")



Multiple Range

Kita sudah mempelajari bagaimana menujuk sebuah range tunggal sebagai sasaran pemograman. Sekarang bagaimana bila kita menginginkan multiple range.

Range (“A1:C3”).value = ”oke”

Range(“A1”,”D4”).value = “oke2”

Kode-kode di atas menunjuk pada multiple range. Pada kode pertama yang ditunjuk adalah range A1 sampai C3, sedanga yang kedua adalah A1 sampai D4.

Range Bernama

Bagi Anda yang sering menggunakan Excel, mungkin sering memberi nama pada sebuah range untuk mempermudah pekerjaan. Pertanyaan dapatkah menunjuk range bernama tersebut dalam VB Excel ? jawabannya, DAPAT!!

Misalkan Anda memiliki sebuah range yang bernama “sel”, maka range ini dapat ditunjuk dengan kode Range (“sel”), sebagai contoh:

Range (“sel”).value = ”ini sel”

Membuat Sebuah Variabel dari Range

Membentuk sebuah variabel dari range sangatlah mudah pada VBE. Tujuannya agar mempermudah dalam pemograman. Pertama kita harus membuat dimensinya terlebih dahulu, caranya dengan menuliskan kode seperti ini:

Dim Pesan As Range

Kemudian kita set variabel tersebut, sesuai dengan range yang kita inginkan ;

Set Pesan = Range("A1")

Atau

Set Pesan = Range("A1").Cells(1, 2)

atau

Set Pesan = Sheet1.Range("A1")

atau

Set Pesan = Sheets("Sheet3").Range("A1")

Kemudian kita dapat melakukan operasi range pada variabel yang telah dibentuk. Sebagai contoh

Dim Pesan As Range

Set Pesan = Sheet1.Range("A1")

Pesan.Value = "pesan nih"

Pesan(1, 2).Value = "pesan kedua"

Range A1 pada Sheet1 akan tertulis “pesan nih” dan range A2 akan tertulis “pesan kedua”. Sebab Pesan(1,2) sama dengan Sheet1.Range(“A1”).Cells(1,2).

Sebenarnya kita dapat membentuk variabel tanpa membuat dimensinya terlebih dahulu, tetapi cara ini idak dianjurkan karena memboroskan memori. Caranya adalah seperti demikian:

Set Pesan = Sheet1.Range("A1")

Pada kasus ini perintah-perintah berikut bisa bekerja,

Pesan.Value = "pesan nih"

Pesan(1, 2).Value = "pesan kedua"

27 komentar:

Anonim mengatakan...

bagus nih buat teman yang mau belajar vbe excel, agar perintah tidak berulang-ulang mas coba tolong kasih contoh penggunaan select case dan do while biar kita pada lebih ngerti nih tanks ya..

Ben mengatakan...

oke..saya coba buatkan tulisannya...dituggu saja.

Anonim mengatakan...

bisa ndak mas, buat hyperlink ke sheet yang tersembunyi?
sehingga hanya tampak 1 sheet tapi jika di klik hyperlink-nya bisa langsung nyambung ke sheet yang lain.

trimakasih atas jawabannya...saya tunggu lho...

Ben mengatakan...

bisa mas, bisa bikin button yang nyambung ke sheet lain.

yang diatus adalah properti visible pada sheet
contoh

Sheet1.Visible = xlSheetHidden

maka sheet1 akan tersembunyi, dan bila

Sheet1.Visible = xlSheetVisible

sheet1 akan muncul..

semoga membantu..

Anonim mengatakan...

salam kenal om ben

saya khazena, baru mengenal vb dan banyak bekerja dengan angka.selama ini selalu kerja manual. saya mohon bantuan, apa bisa & gmn rumus VB nya ???
cara mengimpor isi file dari file excel lain (kondisi tidak aktif)
cth: sheet 1 range A1:A100. ke ws excel yg kita kerjakan. file di import hanya dengan mengcopy nama filenya saja & di pastekan pada tempat yang di tetapkan lalu tinggal klik comand button update.isinya tercopy semua.

terima kasih banyak ditunggu pencerahannya & semoga sukses selalu

Ben mengatakan...

sepertinya kode berikut cocok untuk permasalhana Anda....coba saja...

Private Sub CommandButton1_Click()

Dim wb As Workbook
Dim ws As Worksheet
Set ws = ActiveSheet
Set wb = Workbooks.Open(Application.GetOpenFilename)

wb.Worksheets(1).Cells.Copy
ws.Range("A1").PasteSpecial
wb.Save
wb.Close

End Sub

Efrina Damayanti mengatakan...

salam kenal mas ben.
saya kerja di skool yg kalau akan rapotan sibuk 1/2 hidup (hehe),yaiut ngeprin rapot sebanyak 750 lbr selama 2 hari, supaya cepat saya ingin membuat buton {PRINT} dengan VB caranya gimana ya mas ben, bantu dong

Ben mengatakan...

ini contoh ngeprint sel A1 sampai E20, kopinya 1...printernya default printer (yg biasa dipake)

Private Sub CommandButton1_Click()

Range("A1:E20").PrintOut copies:=1

End Sub

coba pelajari juga link ini :
http://forums.devx.com/archive/index.php/t-78786.html

Unknown mengatakan...

mas ben..klw saya buat macro form input
nama
sekolah
kota
nah,,pertanyaan'y klw dalam excel nanti hasilnya sdh d kelompokkan ke dalam tabel2 berdasarkan kota tp msh dlm 1 sheet gmn y mas ?

Ben mengatakan...

caranya jadikan data kota sebagai patokan...atau bahasa kerennya "kata kunci"...

ayah431 mengatakan...

bagus banget, saya aby bru kenal dengan VBA Excel, padahal setiap hari sya bekerja dg excel.
sya punya masalah kaitannya dengan VBA, sya punya worbook 15 dlm workbook tersbut form sheetnya sama kira-kira bisa ndak saya gabung atau memanggil worbok tersbut biar satu tempatnya sehingga mudah digunakan..
mohon penjelasan lebih lanjut.

ayah431 mengatakan...

bagus bangeet nih.
saya setiap hari menggunakan excel tapi baru kenal nih namanya VBA sya sering kali disuruh buat Raport untuk siswa dimana saya buat dengan mnggunakan excel tapi saya mash pake yang sederhana saja seperti rumus vlookup, dan juga kalo kepepet saya menggunakan mail merge.. naha yang ingin saya pertanayakan disini bagaimana menggunakan vba untuk pengolahan nilai dan pembuatan raport untuk siswa sehingga tidak terlalu banyak worbook yang tersimpan, saya punya 15 kelas, jadi setiap kelas itu saya punya file tersendiri apakah dlm VBA bisa menggabungkan 15 file worbook itu..
mohon penjelasannnya.. terima kasih

ayah431 mengatakan...

mohon panduan vba excel 2007..

Ben mengatakan...

tunggu tulisan saya berikutnya pak...disitu ada sedikit panduan buat vba 2007...

coba kirim contoh workbook nya ke email saya pak...saya lihat dulu...terimakasih

Anonim mengatakan...

numpang nyedot.....sukses selalu

Ben mengatakan...

tararegkyu mas...

Optimize Media mengatakan...

Bang Ben Sungguh menginspirasi...
bang kalau untuk input/ambil pake form tapi nyimpennya ke sheet bisa ndak ya.. misalkan input data karyawan langsung masuk sheet karyawan begitu tekan button add nyimpan ke cell bawahnya ...kasih ilmunya dong bang.. terima kasih sebelumnya.. sukses bang ben

Ben mengatakan...

seperti ini kding nya mas...

di button yang dibuat di form nya

private sub comandbuton_click()

range("A1").value = text1.text

end sub

Optimize Media mengatakan...

Bang Ben Sungguh menginspirasi...
bang kalau untuk input/ambil pake form tapi nyimpennya ke sheet bisa ndak ya.. misalkan input data karyawan langsung masuk sheet karyawan begitu tekan button add nyimpan ke cell bawahnya ...kasih ilmunya dong bang.. terima kasih sebelumnya.. sukses bang ben

Ben mengatakan...

kode sebumnya jga masuk sheet mas, cuma masuk nya ke sheet yg aktif....

kalo mau sheet spesifik tinggal tambahin

Sheet1.range("A1").value = text1.text

data pada text1 akan masuk ke sel A1 di Sheet1...

oke mas, tararengkyu...sukses juga buat mas...

neza ibaneza mengatakan...

salam kenal om Ben, btw boleh tau buku yang bagus untuk belajar VBA hingga mahir apa ya?,,, biar bisa jago kayak om Ben (kidding)...

Ben mengatakan...

salam kenal juga Om Neza...

saya sih gak pernah belajar VBA dari buku...kalo VB6 iya...

dulu jarang ada buku tentang VBA...jadi belajar via mbah google dan VBA help di excel...

sekarang saya lihat di toko2 buku dah banyak buku tentang VBA...

silahakan beli salh satu dan yang paling penting..praktek mas... hehe

Unknown mengatakan...

Pa Ben, bisa tidak Pa mengajarkan VBA privat case study..

Saya bisa datang ke tempat Bapak,saya dapat info Bapak membuka lembaga kursus VBA Makro disekitar serpong, bisa Sabtu Bapak?

Terimakasih

Ben mengatakan...

bisa mbak/bu, sy memang buka lembaga kursus di sekitar serpong untuk VBA.

untuk pengaturan jadwal dan materi nya silahkan email langsung ke bernadushs@yahoo.com mbak/bu

Anonim mengatakan...

bagus tutorialnya, paham jadinya.....

Anonim mengatakan...

mohon bantuan jika sheet 2 aktif maka otomatis isi sheet 1 tercopy di sheet 2 hanya valuenya saja

Ben mengatakan...

di sheet 2 bikin procedure yang event nya di trigger acntive sheet

bis itu cukup pake kode semacam ini

Sheet2.Range("A:A").value = Sheet1.Range("A:A").value