Sebagian besar contoh VBA hanya bekerja dengan satu objek
Range. Namun, dalam proyek nyata Anda sering kali harus memproses beberapa area sekaligus.
Sebagai contoh:
-
memberi warna pada beberapa kolom yang tidak bersebelahan;
-
memeriksa apakah pengguna mengklik area tertentu;
-
menggabungkan beberapa range sebelum disalin atau diformat.
Untuk kebutuhan seperti ini, VBA menyediakan dua fungsi yang sangat berguna, yaitu Union dan Intersect.
Meskipun sama-sama bekerja dengan beberapa objek Range, keduanya memiliki tujuan yang berbeda. Memahami perbedaannya akan membuat kode VBA menjadi lebih sederhana dan mudah dipelihara.
Mengenal Fungsi Union
Union digunakan untuk menggabungkan beberapa range menjadi satu objek Range.
Perlu dipahami bahwa Union tidak menggabungkan isi sel, melainkan hanya menggabungkan area yang akan diproses.
Sintaks dasarnya adalah:
Union(Range("A1:A5"), Range("C1:C5"))
Hasilnya adalah sebuah objek Range yang mencakup kedua area tersebut.
Memberi Format pada Beberapa Area Sekaligus
Misalkan Anda ingin memberi warna kuning pada kolom A dan C tanpa memengaruhi kolom lainnya.
Union( _
Range("A1:A10"), _
Range("C1:C10") _
).Interior.Color = vbYellow
Tanpa Union, Anda harus menulis dua perintah yang terpisah.
Menggunakan Union dengan Banyak Range
Union tidak terbatas hanya pada dua range.
Union( _
Range("A1:A5"), _
Range("C1:C5"), _
Range("E1:E5") _
).Font.Bold = True
Seluruh area akan diperlakukan sebagai satu objek sehingga kode menjadi lebih ringkas.
Mengenal Fungsi Intersect
Jika Union menggabungkan beberapa range, maka Intersect digunakan untuk mencari bagian yang saling beririsan.
Sintaksnya adalah:
Intersect( _
Range("A1:D10"), _
Range("C5:F15") _
)
Hasilnya adalah area yang berada pada kedua range tersebut.
Jika tidak ada irisan, hasilnya adalah Nothing.
Memeriksa Posisi ActiveCell
Salah satu penggunaan Intersect yang paling umum adalah memeriksa apakah sel aktif berada pada area tertentu.
If Not Intersect(ActiveCell, Range("B2:D20")) Is Nothing Then
MsgBox "Sel berada dalam area data."
End If
Teknik ini sering digunakan pada workbook yang memiliki area input khusus.
Menggunakan Intersect pada Event Worksheet
Intersect juga sering dipadukan dengan event Worksheet_SelectionChange.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A2:A100")) Is Nothing Then Exit Sub
MsgBox "Anda memilih kolom pelanggan."
End Sub
Makro hanya akan dijalankan ketika pengguna memilih sel pada kolom A.
Studi Kasus
Misalkan sebuah formulir hanya memperbolehkan pengguna mengubah data pada area B2:E15.
Untuk memeriksa apakah sel yang dipilih berada pada area tersebut, gunakan:
If Not Intersect(Target, Range("B2:E15")) Is Nothing Then
Target.Interior.Color = vbGreen
End If
Setiap sel yang dipilih di dalam area akan langsung diberi warna hijau.
Menyimpan Hasil Union ke Variabel
Jika hasil Union akan digunakan beberapa kali, sebaiknya simpan ke dalam variabel.
Dim Area As Range
Set Area = Union( _
Range("A1:A5"), _
Range("D1:D5"))
Area.Font.Italic = True
Area.Interior.Color = vbCyan
Cara ini membuat kode lebih rapi dan mudah dibaca.
Perbedaan Union dan Intersect
| Union | Intersect |
|---|---|
| Menggabungkan beberapa range | Mencari irisan beberapa range |
| Selalu menghasilkan gabungan area | Menghasilkan area yang saling bertumpang tindih |
| Cocok untuk format, salin, atau pemrosesan beberapa range | Cocok untuk validasi area dan event worksheet |
Kesalahan yang Sering Dilakukan
Mengira Union Menggabungkan Isi Sel
Union hanya menggabungkan objek Range.
Jika tujuan Anda adalah menggabungkan isi teks dari beberapa sel, gunakan operator & atau fungsi lain yang sesuai.
Tidak Memeriksa Nilai Nothing
Karena Intersect dapat mengembalikan Nothing, selalu lakukan pengecekan sebelum menggunakan hasilnya.
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Dengan cara ini, makro tidak akan menghasilkan error ketika tidak ada irisan.
Menggunakan Range dari Worksheet Berbeda
Union maupun Intersect hanya dapat bekerja dengan range yang berasal dari worksheet yang sama.
Jika salah satu range berasal dari worksheet lain, VBA akan menghasilkan error.
Tips Praktis
💡 Gunakan Union untuk mengurangi penulisan kode yang berulang saat memformat beberapa area.
💡 Gunakan Intersect pada event worksheet untuk mengetahui apakah pengguna memilih area tertentu.
💡 Simpan hasil Union atau Intersect ke dalam variabel jika akan digunakan lebih dari satu kali.
💡 Pastikan semua range berasal dari worksheet yang sama.
💡 Selalu periksa hasil Intersect terhadap Nothing sebelum mengakses propertinya.
Ringkasan
| Fungsi | Kegunaan |
|---|---|
Union() |
Menggabungkan beberapa objek Range |
Intersect() |
Mencari irisan dari beberapa Range |
Nothing |
Menunjukkan tidak ada area yang beririsan |
Set |
Menyimpan hasil Union atau Intersect ke variabel |
Kesimpulan
Union dan Intersect merupakan dua fungsi penting yang membantu Anda bekerja dengan beberapa objek Range secara lebih efisien. Union memungkinkan beberapa area diperlakukan sebagai satu kesatuan, sedangkan Intersect memudahkan pemeriksaan apakah suatu sel atau range berada dalam area tertentu. Dengan memahami keduanya, Anda dapat menulis kode VBA yang lebih ringkas, fleksibel, dan mudah dikembangkan.
