Offset dan Resize di VBA Excel, Lebih Kuat Jika Digabungkan

Mengapa Menggabungkan Offset dan Resize?

Perhatikan contoh berikut.

Misalkan terdapat data seperti ini.

NamaKotaNilai
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:

  1. memilih range A1:C10;

  2. menggeser area satu baris ke bawah menggunakan Offset;

  3. 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

MetodeFungsi
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.

Hubungi Kami

Kantor Berkreasi
Alamat :
Pens Sky Venture - Sukolilo Surabaya
Karangrejo Tmur 17 Surabaya

Email : kantor.berkreasi@gmail.com
WA : wa.me/6287761589881  
(Support  Mbak Ana)

Tim Pengembang

Dr. Rojabi Azharghany, M.Si, S.Sos
Dr. H. Agus Sulthoni Imami, S.Psi. M.Pd.I.
Ali Ishaq, M.Pd.
Didik Rahwiniyanto, S.Si., M.Pd.
Mujiburrohman, M.Pd.
Mohammad Zikky, S.ST, M.T
Amien sawedi, S.Pd.
Didik P Wicaksono, M.Pd.