Mengapa Menggabungkan Offset dan Resize?
Perhatikan contoh berikut.
Misalkan terdapat data seperti ini.
| Nama | Kota | Nilai |
|---|---|---|
| Andi | Jakarta | 80 |
| Budi | Bandung | 90 |
| Citra | Surabaya | 75 |
Jika Anda memilih seluruh tabel:
Range("A1:C4")
Header ikut terpilih.
Padahal sering kali yang ingin diproses hanyalah isi datanya.
Dengan menggabungkan Offset dan Resize, Anda dapat menggeser area pilihan sekaligus menyesuaikan ukurannya.
Cara Kerja Offset dan Resize
Perhatikan kode berikut.
Range("A1:C10").Offset(1, 0).Resize(9, 3)
Urutan prosesnya adalah:
-
memilih range
A1:C10; -
menggeser area satu baris ke bawah menggunakan
Offset; -
mengubah ukuran area menjadi 9 baris × 3 kolom menggunakan
Resize.
Hasil akhirnya adalah:
A2:C10
Sintaks Dasar
Sintaks umum yang sering digunakan adalah:
Range.Offset(JumlahBaris, JumlahKolom).Resize(JumlahBarisBaru, JumlahKolomBaru)
Karena Offset menghasilkan objek Range, hasilnya dapat langsung diteruskan ke Resize.
Contoh 1 — Mengabaikan Header
Misalkan data berada pada range:
A1:D100
Baris pertama merupakan header.
Untuk memilih hanya data:
Sub PilihData()
Range("A1:D100") _
.Offset(1, 0) _
.Resize(99, 4) _
.Select
End Sub
Range yang dipilih menjadi:
A2:D100
Contoh 2 — Menyalin Isi Data Tanpa Header
Sub CopyData()
Range("A1:C20") _
.Offset(1, 0) _
.Resize(19, 3) _
.Copy Destination:=Sheets("Backup").Range("A1")
End Sub
Header tidak ikut disalin.
Contoh 3 — Menggunakan CurrentRegion
Kombinasi ini sering digunakan bersama CurrentRegion.
Sub DataTanpaHeader()
Range("A1") _
.CurrentRegion _
.Offset(1, 0) _
.Resize( _
Range("A1").CurrentRegion.Rows.Count - 1, _
Range("A1").CurrentRegion.Columns.Count _
) _
.Select
End Sub
Keuntungan pendekatan ini adalah area data akan menyesuaikan secara otomatis meskipun jumlah baris berubah.
Contoh 4 — Memberi Warna pada Data Saja
Sub FormatIsiData()
With Range("A1").CurrentRegion
.Offset(1, 0) _
.Resize(.Rows.Count - 1, .Columns.Count) _
.Interior.Color = vbYellow
End With
End Sub
Header tetap tidak berubah.
Contoh 5 — Menghapus Isi Data Tanpa Menghapus Header
Sub BersihkanData()
With Range("A1").CurrentRegion
.Offset(1, 0) _
.Resize(.Rows.Count - 1, .Columns.Count) _
.ClearContents
End With
End Sub
Header tetap dipertahankan.
Studi Kasus
Misalkan Anda menerima data penjualan setiap hari.
Jumlah baris selalu berubah, tetapi format tabel selalu sama.
Anda ingin menghitung total hanya pada data penjualan, bukan pada header.
Sub HitungTotal()
Dim Data As Range
With Range("A1").CurrentRegion
Set Data = .Offset(1, 0) _
.Resize(.Rows.Count - 1, .Columns.Count)
End With
MsgBox WorksheetFunction.Sum(Data.Columns(3))
End Sub
Makro akan tetap bekerja meskipun jumlah data bertambah atau berkurang.
Mengapa Teknik Ini Sangat Sering Digunakan?
Kombinasi Offset dan Resize membuat kode menjadi lebih fleksibel karena tidak bergantung pada alamat sel yang tetap.
Teknik ini banyak digunakan ketika:
-
mengolah laporan harian;
-
membuat dashboard;
-
membersihkan data impor;
-
membuat laporan otomatis;
-
memproses hasil ekspor dari sistem lain.
Kesalahan yang Sering Terjadi
Offset Tanpa Resize
Range("A1:C100").Offset(1, 0)
Ukuran range tetap 100 baris sehingga area yang dipilih menjadi:
A2:C101
Sering kali hasil tersebut tidak sesuai dengan yang diharapkan.
Resize Terlalu Besar
.Resize(1000, 20)
Pastikan ukuran baru memang sesuai dengan data yang tersedia.
Tidak Mengurangi Jumlah Header
Kesalahan yang cukup sering terjadi adalah:
.Resize(.Rows.Count, .Columns.Count)
Padahal header sudah digeser menggunakan Offset.
Yang benar:
.Resize(.Rows.Count - 1, .Columns.Count)
Tips Praktis
💡 Gunakan Offset untuk menggeser posisi range.
💡 Gunakan Resize untuk menyesuaikan ukuran range setelah digeser.
💡 Kombinasikan dengan CurrentRegion agar makro dapat menyesuaikan jumlah data secara otomatis.
💡 Gunakan With agar penulisan kode lebih ringkas dan mudah dibaca.
💡 Selalu periksa jumlah baris sebelum menggunakan .Rows.Count - 1, terutama jika tabel hanya berisi header.
Ringkasan
| Metode | Fungsi |
|---|---|
Offset() |
Menggeser posisi range |
Resize() |
Mengubah ukuran range |
CurrentRegion |
Mengambil seluruh area data yang saling terhubung |
Offset() + Resize() |
Memilih area data secara dinamis tanpa header |
Kesimpulan
Menggabungkan Offset dan Resize merupakan teknik yang sangat berguna ketika bekerja dengan data yang ukuran maupun posisinya dapat berubah. Dengan menggeser area menggunakan Offset dan menyesuaikan ukurannya menggunakan Resize, Anda dapat membuat makro yang lebih fleksibel, menghindari penggunaan alamat sel yang tetap, serta memproses data tanpa melibatkan header. Teknik ini menjadi salah satu pola yang paling sering digunakan dalam pembuatan aplikasi VBA Excel yang dinamis.
