Belajar VBA - Bekerja dengan Data: Sorting, Filtering & Cleanup
Episode 9 of 25

Belajar VBA - Bekerja dengan Data: Sorting, Filtering & Cleanup

Mengotomasi pengolahan data di Excel: sorting dengan Sort, filtering dengan AutoFilter, menghapus duplikat, find dan replace, memakai SpecialCells untuk sel kosong, serta pola membersihkan dan menormalkan data dalam jumlah besar

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 8 kalian menguasai Object Model — workbook, worksheet, dan range — kini kita gunakan untuk pekerjaan yang sebenarnya: mengolah data. Di dunia nyata, sebagian besar waktu analis data habis di tahap yang tidak glamor: sorting, memfilter, menghapus duplikat, dan membersihkan data yang berantakan.

Mengapa episode ini penting? Karena justru pekerjaan inilah yang paling sering diotomasi dengan VBA. Sebuah laporan mingguan yang isinya "sortir, filter, hapus duplikat, bereskan format" adalah kandidat otomasi sempurna — dan setelah episode ini, kalian bisa menuliskannya dalam satu macro.

Sorting Data

Range.Sort mengurutkan data dengan kontrol penuh atas kolom kunci dan arahnya:

Mengurutkan berdasarkan kolom B
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
 
Range("A1:D" & lastRow).Sort _
    Key1:=Range("B2"), Order1:=xlAscending, _
    Header:=xlYes

Parameter penting:

ParameterFungsi
Key1/Key2Kolom kunci pengurutan
Order1xlAscending / xlDescending
HeaderxlYes jika baris pertama adalah judul

Untuk pengurutan bertingkat, tambahkan Key2:

Sortir dua tingkat
Range("A1:D" & lastRow).Sort _
    Key1:=Range("B2"), Order1:=xlAscending, _
    Key2:=Range("C2"), Order2:=xlDescending, _
    Header:=xlYes

Filtering dengan AutoFilter

AutoFilter menyaring data sesuai kriteria — setara mengeklik ikon corong:

Aktifkan filter dan terapkan kriteria
Range("A1:D" & lastRow).AutoFilter
Range("A1:D" & lastRow).AutoFilter _
    Field:=3, Criteria1:=">=75"

Field:=3 berarti kolom ketiga dari rentang, Criteria1:=">=75" adalah kriteria nilainya. Untuk beberapa kriteria:

Filter dengan dua kriteria
Range("A1:D" & lastRow).AutoFilter _
    Field:=3, Criteria1:=">=" & 75, Operator:=xlAnd, Criteria2:="<=100"

Membaca Hasil Filter ke Kode

Bagaimana mengetahui berapa baris yang lolos filter? Semua Range sudah tersedia — tinggal berjalan dari baris data pertama:

Hitung baris yang terlihat
Dim r As Long
Dim jumlah As Long
jumlah = 0
For r = 2 To lastRow
    If Rows(r).Hidden = False Then
        jumlah = jumlah + 1
    End If
Next r
Debug.Print "Baris terlihat: " & jumlah

Pola ini juga bisa digunakan untuk menyalin hasil filter ke sheet lain dengan Range.SpecialCells(xlCellTypeVisible) — dipakai di banyak laporan.

Tip

Untuk menyalin hasil filter, jangan salin seluruh range — itu ikut menyalin baris tersembunyi. Gunakan Range.SpecialCells(xlCellTypeVisible).Copy lalu tempel ke tujuan. Hasilnya persis baris yang terlihat.

Menghapus Duplikat

Range.RemoveDuplicates membersihkan data kembar dalam satu perintah:

Hapus duplikat berdasarkan kolom A dan B
Range("A1:D" & lastRow).RemoveDuplicates _
    Columns:=Array(1, 2), Header:=xlYes

Columns:=Array(1, 2) berarti kombinasi kolom 1 dan 2 menentukan keunikan. Baris yang muncul belakangan dibuang; baris pertama dipertahankan.

Find & Replace

Pencarian data dengan Find mengembalikan objek Range:

Menemukan nilai di kolom A
Dim target As Range
Set target = Range("A1:A" & lastRow).Find(What:="Selesai", LookAt:=xlWhole)
 
If Not target Is Nothing Then
    Debug.Print "Ditemukan di " & target.Address
Else
    Debug.Print "Tidak ditemukan"
End If

Pastikan selalu memeriksa Is Nothing — jika tidak ketemu, Find mengembalikan Nothing, dan memakai variabel yang Nothing memicu error.

Replace bekerja serupa dan bisa menjangkau seluruh sheet:

Replace di seluruh sheet
Cells.Replace What:="-", Replacement:="", LookAt:=xlPart

SpecialCells: Menangani Sel Kosong

SpecialCells menyeleksi sel dengan karakteristik tertentu — kosong, formula, konstanta, atau terlihat. Kasus paling umum: menghapus baris kosong.

Menghapus baris kosong (versi benar)
Dim cell As Range
Dim barisHapus As String
 
barisHapus = ""
For Each cell In Range("A1:A" & lastRow)
    If Trim(cell.Value) = "" Then
        barisHapus = barisHapus & cell.Row & ","
    End If
Next cell
 
If Len(barisHapus) > 0 Then
    Range("A" & Replace(barisHapus, ",", ",A")).EntireRow.Delete
End If

Warning

Jangan menghapus baris di dalam For Each sambil menelusuri — mengubah ukuran range saat di-loop merusak urutan iterasi. Kumpulkan nomor baris dulu (seperti kode di atas), baru hapus setelah loop selesai.

Cara lebih cepat untuk menghapus semua sel kosong sekaligus:

Hapus sel kosong sekaligus dengan SpecialCells
On Error Resume Next
Range("A1:C" & lastRow).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
On Error GoTo 0

xlCellTypeBlanks gagal (melempar error) jika tidak ada satu pun sel kosong — karena itu On Error Resume Next melindungi baris ini. Pola On Error akan dibahas tuntas di episode 15.

Normalisasi Format

Bersih-bersih terakhir: rapikan format agar laporan konsisten.

Normalisasi kolom
With Range("A1:D" & lastRow)
    .HorizontalAlignment = xlLeft
    .VerticalAlignment = xlCenter
    .Font.Name = "Calibri"
    .Font.Size = 11
    .WrapText = False
End With

Blok With...End With menghindari menulis Range("A1:D" & lastRow) berulang-ulang — objek direferensikan sekali, properti diubah banyak. Ini pola VBA yang sangat idiomatis.

Macro Lengkap: Pipeline Pembersihan

Mari satukan semuanya menjadi satu macro yang meniru pekerjaan harian analis data:

Pipeline pembersihan data
Sub PipelineBersih()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
 
    Set ws = ThisWorkbook.Worksheets("Data")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    With ws
        .Range("A1:D" & lastRow).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
        .Cells.Replace What:="n/a", Replacement:="", LookAt:=xlWhole
        .Range("A1:D" & lastRow).AutoFilter
        .Range("A1:D" & lastRow).AutoFilter Field:=3, Criteria1:="<>"
        .Range("A1:D" & lastRow).Sort Key1:=.Range("B2"), Header:=xlYes
    End With
End Sub

Setelah pipeline ini, data sudah di-deduplikasi, nilai "n/a" dibersihkan, baris tanpa nilai di kolom 3 difilter, dan diurutkan. Satu klik untuk pekerjaan 30 menit.

Common Pitfalls

KesalahanDampak
Sort dengan Header:=xlNo padahal ada judulJudul ikut teracak
Menghapus baris dalam loopBaris terlewat / salah hapus
Tidak cek Is Nothing setelah FindError runtime saat target tak ada
SpecialCells(xlCellTypeBlanks) tanpa On ErrorError saat tak ada sel kosong
AutoFilter lama tidak dimatikan sebelum filter baruKriteria menumpuk membingungkan

Penutup

Pada episode 9 ini, kalian telah mengotomasi pengolahan data di Excel.

Inti yang harus dibawa pulang:

  • Sort dengan Key1, Order1, Header untuk pengurutan 1-2 tingkat.
  • AutoFilter dengan Field dan Criteria1 untuk menyaring; baca hasil via properti Hidden.
  • RemoveDuplicates membersihkan data kembar; Find/Replace mencari dan mengganti nilai.
  • SpecialCells(xlCellTypeVisible) untuk menyalin hasil filter; xlCellTypeBlanks untuk sel kosong.
  • Hapus baris setelah loop selesai, bukan di dalamnya.

Di episode 10 selanjutnya kita membahas loop range & array untuk performa — membaca range ke array memori, memprosesnya di sana, dan menuliskan kembali, yang bisa membuat macro ratusan kali lebih cepat dibanding mengakses sel satu per satu. Sampai jumpa di episode 10!