Thursday, September 12, 2013

BelajarVBA 011 - Range 02 (seluruh baris/kolom)

Coretan Mr. Kid

Meremehkan dosa sekecil apapun adalah awal bencana diri. Janganlah pernah meremehkan dosa sekecil apapun. Segeralah meminta ampunan-Nya.

Kadangkala dalam mengotomasi ataupun membangun aplikasi berbasis Excel, dibutuhkan pemilihan range utuh seluruh kolom atau seluruh baris. Bagian ini akan membahas tentang mendapatkan range di seluruh baris atau seluruh kolom tersebut.


Mendapatkan range disuatu baris

Prosedur yang digunakan untuk menampung script belajar pada kegiatan ini adalah prosedur bernama RangeSuatuBaris yang memiliki bentuk blok prosedur sebagai berikut :
   Public Sub RangeSuatuBaris()
     Dim rng As Range
   
     'baris kode akan dimulai dari baris kosong setelah baris ini
   
   End Sub


Beberapa cara merujuk range suatu baris adalah sebagai berikut :
Satu baris saja, yaitu baris 3
'>> baris 3 saja
'dengan Rows diberi inputan nilai index baris

Set rng = Rows(3)       'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Rows diberi inputan teks baris
Set rng = Rows("3")     'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Rows diberi inputan teks baris seperti inputan range
Set rng = Rows("3:3")   'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Range diberi inputan teks baris dari dan sampai
Set rng = Range("3:3")  'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Range berdasar sebuah range dalam baris tersebut
Set rng = Range("A3").EntireRow  'simpan di variabel bernama rng
rng.Copy                         'copy range terpilih ke clipboard
MsgBox rng.Address               'pesan bahwa range terpilih sudah ter-copy


Dari contoh diatas, untuk mendapatkan seluruh range pada sebuah baris (misal pada baris 3) dapat dilakukan dengan menggunakan :
  1. properti Rows milik Application yang dapat diberi inputan berupa :
    • nilai index baris yang bertipe numerik (3)
    • teks nomor baris yang bertipe teks ("3")
    • teks alamat baris untuk seluruh kolom dari awal sampai akhir seperti ("3:3")
  2. object Range yang :
    • merujuk langsung dengan inputan berupa teks alamat baris untuk seluruh kolom dari awal sampai akhir seperti ("3:3")
    • menggunakan properti EntireRow milik object range berdasar sebuah range di baris tersebut seperti baris kode :
         Range("A3").EntireRow
      yang berarti pada range A3 dilanjutkan proses untuk memilih suatu baris di range tersebut
Proses untuk menyusun alamat range seperti yang dijelaskan pada pembahasan sebelumnya juga bisa dimanfaatkan.

Beberapa baris yang kontinyu, yaitu dari baris 3 sampai baris 7
Baris yang kontinyu artinya akan terkumpul banyak range yang saling bersebelahan tanpa putus membentuk 1 (satu) area range. Untuk merujuk ke satu area range dari baris 3 sampai baris 7 dibutuhkan alamat range bertipe teks yang berbunyi "3:7". 
'>> dari baris 3 sampai baris 7
'dengan Rows diberi inputan teks baris

Set rng = Rows("3:7")   'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Range diberi inputan teks baris dari dan sampai
Set rng = Range("3:7")  'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Range berdasar suatu range dalam baris-baris tersebut
Set rng = Range("A3:A7").EntireRow  'simpan di variabel bernama rng
rng.Copy                            'copy range terpilih ke clipboard
MsgBox rng.Address                  'pesan bahwa range terpilih sudah ter-copy


Dari contoh diatas, properti Rows masih bisa digunakan karena yang dirujuk masih berupa 1 (satu) area range. Seluruh inputan sudah bertipe teks berupa alamat range.

Beberapa baris yang saling terpisah, yaitu baris 3, 8, dan dari baris 15 sampai baris 17
Teks alamat range untuk merujuk baris-baris seperti ini akan berbunyi "3:3,8:8,15:17". Hasilnya akan berupa 3 (tiga) buah area range, yaitu area range baris 3, area range baris 8, dan area range baris 15 sampai 17. Karena sudah ada lebih dari 1 (satu) area range, maka properti Rows sudah tidak dapat digunakan. Jadi range dirujuk menggunakan object Range.
'>> baris 3, 8, 15:17
'dengan Range diberi inputan teks alamat range

Set rng = Range("3:3,8:8,15:17")    'simpan di variabel bernama rng
rng.Copy                            'copy range terpilih ke clipboard
MsgBox rng.Address                  'pesan bahwa range terpilih sudah ter-copy

'dengan Range berdasar suatu range dalam baris-baris tersebut
Set rng = Range("A3,A8,A15:A17").EntireRow  'simpan di variabel bernama rng
rng.Copy                                    'copy range terpilih ke clipboard
MsgBox rng.Address                          'pesan range terpilih sudah ter-copy


Mendapatkan range disuatu kolom

Pada dasarnya, proses untuk mendapatkan range disuatu kolom mirip dengan untuk mendapatkan seluruh baris. Perbedaan mendasar adalah alamat range yang digunakan adalah nama-nama kolom Excel. Indeks kolom Excel bisa digunakan ketika memanfaatkan properti Columns dan hanya untuk merujuk 1 (satu) kolom saja. Seperti halnya properti Rows ketika diberi inputan berupa teks alamat range, properti Columns hanya bisa digunakan untuk merujuk ke 1 (satu) area range suatu kolom utuh.

Prosedur yang digunakan untuk menampung script belajar pada kegiatan ini adalah prosedur bernama RangeSuatuKolom yang memiliki bentuk blok prosedur sebagai berikut :
   Public Sub RangeSuatuKolom()
     Dim rng As Range
   
     'baris kode akan dimulai dari baris kosong setelah baris ini
   
   End Sub


Beberapa cara merujuk range suatu kolom adalah sebagai berikut :
Satu kolom saja, yaitu kolom B
'>> kolom B saja
'dengan Columns diberi inputan nilai indeks kolom

Set rng = Columns(2)    'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Columns diberi inputan teks kolom
Set rng = Columns("B")  'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Columns diberi inputan teks kolom seperti inputan range
Set rng = Columns("B:B")    'simpan di variabel bernama rng
rng.Copy                    'copy range terpilih ke clipboard
MsgBox rng.Address          'pesan bahwa range terpilih sudah ter-copy

'dengan Range diberi inputan teks kolom dari dan sampai
Set rng = Range("B:B")  'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Range berdasar sebuah range dalam kolom tersebut
Set rng = Range("B1").EntireColumn  'simpan di variabel bernama rng
rng.Copy                            'copy range terpilih ke clipboard
MsgBox rng.Address                  'pesan bahwa range terpilih sudah ter-copy


Contoh-contoh diatas menggunakan properti Columns milik Application dan ada yang menggunakan properti EntireColumn milik object Range.

Beberapa kolom yang kontinyu, yaitu dari kolom B sampai kolom E
Teks alamat range untuk merujuk ke suatu kolom dari kolom B sampai kolom E akan berbunyi "B:E".
'>> dari kolom B sampai kolom E
'dengan Columns diberi inputan teks kolom seperti inputan range

Set rng = Columns("B:E")    'simpan di variabel bernama rng
rng.Copy                    'copy range terpilih ke clipboard
MsgBox rng.Address          'pesan bahwa range terpilih sudah ter-copy

'dengan Range diberi inputan teks kolom dari dan sampai
Set rng = Range("B:E")  'simpan di variabel bernama rng
rng.Copy                'copy range terpilih ke clipboard
MsgBox rng.Address      'pesan bahwa range terpilih sudah ter-copy

'dengan Range berdasar suatu range dalam kolom tersebut
Set rng = Range("B1:E1").EntireColumn   'simpan di variabel bernama rng
rng.Copy                                'copy range terpilih ke clipboard
MsgBox rng.Address                      'pesan range terpilih sudah ter-copy


Dari contoh diatas, penggunaan indeks kolom Excel sudah tidak dapat digunakan lagi karena akan merujuk ke banyak kolom. Inputan sudah berupa teks alamat range.

Beberapa kolom yang saling terpisah, yaitu kolom B, F, dan dari kolom K sampai kolom M
Teks alamat range untuk merujuk kolom-kolom seperti ini akan berbunyi "B:B,F:F,K:M". Hasilnya akan berupa 3 (tiga) buah area range, yaitu area range kolom B, area range kolom F, dan area range kolom K sampai M. Karena sudah ada lebih dari 1 (satu) area range, maka properti Columns sudah tidak dapat digunakan. Jadi range dirujuk menggunakan object Range.
'>> kolom B, F, K:M
'dengan Range diberi inputan teks kolom dari dan sampai

Set rng = Range("B:B,F:F,K:M")  'simpan di variabel bernama rng
rng.Copy                        'copy range terpilih ke clipboard
MsgBox rng.Address              'pesan bahwa range terpilih sudah ter-copy

'dengan Range berdasar suatu range dalam kolom tersebut
Set rng = Range("B1,F1,K1:M1").EntireColumn 'simpan di variabel bernama rng
rng.Copy                                    'copy range terpilih ke clipboard
MsgBox rng.Address                          'pesan range terpilih sudah ter-copy


Mendapatkan seluruh range dalam worksheet

Keadaan ini bisa juga diartikan seluruh baris atau seluruh kolom yang ada dalam worksheet. Prosedur yang digunakan untuk menampung script belajar pada kegiatan ini adalah prosedur bernama RangeSemuanya yang memiliki bentuk blok prosedur sebagai berikut :
   Public Sub RangeSemuanya()
      Dim rng As Range
   
      'baris kode akan dimulai dari baris kosong setelah baris ini
   
   End Sub


Beberapa cara merujuk range seluruh range dalam worksheet adalah sebagai berikut :
Cara 1 : memanfaatkan properti Cells
'Cara 1 : Cells
Set rng = Cells     'simpan di variabel bernama rng
rng.Copy            'copy range terpilih ke clipboard
MsgBox rng.Address  'pesan bahwa range terpilih sudah ter-copy


Cara 2 : merujuk seluruh range pada baris pertama kemudian merujuk ke seluruh kolomnya
'Cara 2 : Rows 1 dan EntireColumn
Set rng = Rows(1)           'merujuk baris pertama secara utuh
Set rng = rng.EntireColumn  'hasilnya dirujuk ke seluruh kolom
rng.Copy                    'copy range terpilih ke clipboard
MsgBox rng.Address          'pesan bahwa range terpilih sudah ter-copy

Cara 3 : merujuk seluruh range pada kolom pertama kemudian merujuk ke seluruh barisnya
'Cara 3 : Columns 1 dan EntireRow
Set rng = Columns(1)        'merujuk kolom pertama secara utuh
Set rng = rng.EntireRow     'hasilnya dirujuk ke seluruh kolom
rng.Copy                    'copy range terpilih ke clipboard
MsgBox rng.Address          'pesan bahwa range terpilih sudah ter-copy


Simpulan

Beberapa hal yang menjadi benang merah dari contoh-contoh diatas adalah :
  • Properti Rows atau Columns dapat digunakan untuk merujuk ke seluruh range dalam baris-baris tersebut atau kolom-kolom tersebut selama hasilnya membentuk 1 (satu) area range. Jadi, baris-baris atau kolom-kolom yang dirujuk haruslah kontinyu.
  • Indeks baris maupun indeks kolom bisa digunakan sebagai inputan pada penggunaan properti Rows atau Columns untuk merujuk ke 1 (satu) baris saja atau 1 (satu) kolom saja. Hal ini dikarenakan area range yang dihasilkan adalah sebanyak 1 (satu) area range, yaitu 1 (satu) baris saja atau 1 (satu) kolom saja.
  • Untuk merujuk lebih dari satu baris atau satu kolom, maka dibutuhkan alamat range yang menunjukkan dari range awal sampai range akhir yang bertipe teks.
  • Object Range memiliki keluwesan yang lebih tinggi daripada properti Rows atau Columns, karena bisa merujuk ke banyak area.
  • Object Range membutuhkan inputan berupa teks alamat range.
  • Properti EntireColumn atau EntireRow milik object Range dapat digunakan untuk merujuk ke seluruh range pada baris-baris atau kolom-kolom yang dibutuhkan dengan diketahui sebuah range dimasing-masing baris-baris atau kolom-kolom yang dibutuhkan.
  • Properti Cells akan menghasilkan seluruh range dalam worksheet.
  • Merujuk ke seluruh range dalam worksheet dapat juga dilakukan dengan merujuk ke seluruh range pada baris pertama lalu merujuk ke seluruh kolom yang ada, atau sebaliknya, yaitu merujuk ke seluruh range pada kolom pertama lalu merujuk ke seluruh baris yang ada.

:)

Insya Allah, pembahasan selanjutnya tentang dirty range yang sering disebut Used Range, perpotongan range, perujukan ke banyak range yang terpisah dalam sebuah variabel melalui banyak proses (Union).



No comments:

Post a Comment