VLOOKUP Lemot Itu Pilihan Kamu Sendiri (Ini Cara Cepatnya)
8:15 PM
Triknya ada di argumen ke-4 yang katanya "salah" — dan di satu titik koma kecil yang mengubah segalanya.
Ada satu aturan yang mungkin sudah kamu hafal luar kepala soal VLOOKUP: selalu akhiri dengan FALSE. Exact match. Jangan pernah TRUE. Aturan itu — sejauh ini — nggak salah kok. Tapi diam-diam, aturan itu juga yang bikin file Excel kamu yang gede jadi lemot.
Nah, ini bagian yang jarang dibahas orang: VLOOKUP exact-match yang selama ini kamu bangga-banggakan justru yang paling lambat. Versi approximate-match yang katanya "berbahaya" — yang pakai TRUE — itu justru yang paling cepat. Jauh lebih cepat malah. Kita cuma perlu tahu cara menjinakkannya dulu.
Paman mau tunjukkan sesuatu yang menurut Paman keren banget. Tapi sebelum itu, mampir dulu sebentar ke satu hal kecil — soalnya ternyata pintu menuju versi cepat itu sudah nangkring di argumen ke-4 itu dari dulu.
Trik kilat: tiga cara menulis "exact match"
Selama ini kamu mungkin selalu menulis versi lengkapnya:
=VLOOKUP(value;range;col;FALSE)Coba perhatikan, argumen terakhir itu bisa dipersingkat.
Langkah 1 — ganti FALSE dengan 0. Buat Excel, FALSE itu sama saja dengan 0. Dua-duanya nilai yang sama, cuma beda baju. Jadi ini identik, dan lebih pendek:
=VLOOKUP(value;range;col;0)Langkah 2 — biarkan kosong tapi titik komanya tetap ada. Argumen yang kosong dibaca sebagai 0, dan 0 artinya FALSE. Jadi ini masih tetap exact match, dengan ketikan paling sedikit:
=VLOOKUP(value;range;col;)Nah itu dia trik kilatnya: FALSE → 0 → (kosong). Tiga cara nulis, hasilnya sama persis. Pakai saja yang paling nyaman buat kamu — Paman sendiri sudah kadung sreg sama titik koma nyantol di ujung itu.
Tapi jangan sampai titik koma itu ikut hilang — dan ini poin utama artikel kali ini. Kalau kamu hapus titik komanya juga, itu bukan lagi "FALSE karena dikosongkan." Itu artinya kamu menulis default bawaan fungsinya — dan default VLOOKUP itu
TRUE:=VLOOKUP(value;range;col) ← tanpa titik koma = TRUE (approximate!) =VLOOKUP(value;range;col;) ← kosong + titik koma = FALSE (exact)Dua formula yang kelihatannya kembar identik, tapi hasilnya kebalik seratus delapan puluh derajat. Bedanya cuma satu karakter.
Paman coba langsung, mencari
25 di tabel kecil. FALSE, 0, dan titik koma kosong semuanya bilang #N/A — exact match, dan 25 memang tidak ada. Hapus titik komanya, dan formulanya dengan santai mengembalikan Banana. Itu tandanya TRUE menyelinap masuk lewat pintu belakang.Jadi simpan ini sebagai kebiasaan umum: argumen yang dikosongkan (titik koma tetap ada, nilainya hilang) dibaca sebagai 0/FALSE — trik hemat ketikan yang berlaku di banyak fungsi lain juga. Tapi kalau titik komanya ikut dihapus sepenuhnya, kendali berpindah ke default bawaan fungsi itu sendiri, dan default itu tidak selalu FALSE. VLOOKUP ini buktinya — defaultnya TRUE.
Dan TRUE yang dari tadi kita hindari-hindari itu? Itu jalur cepatnya. Yuk kita bedah.
Alasan kenapa FALSE itu lambat
Waktu kamu menulis =VLOOKUP(id;Data;2;), Excel melakukan hal yang jujur tapi lamban: dia mulai dari baris paling atas kolom lookup, lalu mengecek satu per satu sampai ketemu nilai yang kamu cari. Baris 1, baris 2, baris 3… terus sampai bawah.
Kalau datanya cuma 100 baris, ya nggak masalah. Tapi kalau 200.000 baris, dengan ribuan formula seperti ini yang hitung ulang bersamaan? Duh, lama banget nunggunya.
Ini namanya linear search — "lihat semuanya sampai ketemu jawabannya secara nggak sengaja." Skenario terburuknya, buat cari satu nilai di antara satu juta baris, Excel bisa melakukan satu juta perbandingan. Kalikan itu dengan setiap VLOOKUP yang ada di sheet kamu. Nah, itu dia biang keladi kursor loading dan kipas laptop yang mendadak berisik.
Kenapa TRUE itu cepat: dia nggak perlu lihat semuanya
Ganti argumen terakhir jadi TRUE (approximate match), dan Excel langsung pindah ke mesin yang sama sekali berbeda: binary search.
Bayangin lagi cari nama "Nathan" di buku telepon jaman dulu yang tebal. Kamu nggak mungkin mulai dari halaman 1 terus baca satu-satu — bisa keburu tua. Kamu buka di tengah, ketemu huruf "M," terus mikir: kecepetan, Nathan ada di belakang ini. Kamu buang seluruh separuh awal buku itu. Buka lagi di tengah sisanya, ketemu "R" — kelewatan, mundur lagi. Buang lagi separuhnya. Beberapa kali buka, dan kamu sudah ketemu Nathan.
Ini cuma bisa jalan karena buku teleponnya sudah tersusun rapi (sorted). Dan caranya efisien banget: setiap kali buka, separuh sisa dibuang.
- Nebak angka antara 1 sampai 100 dengan cara dibagi dua terus → paling banyak 7 kali tebakan, kelar.
- Cari satu baris di antara 1.000.000 → sekitar 20 perbandingan. Bukan sejuta. Dua puluh.
Kita hitung pakai angka beneran — perbandingan terburuk buat nemuin satu baris:
Baca tabel itu ke samping: tiap kali data kamu membesar sepuluh kali lipat, linear search jadi sepuluh kali lebih lambat — sementara binary search cuma nambah tiga atau empat perbandingan saja. Yang satu ngecek semuanya, yang satu lagi nyaris nggak ngapa-ngapain. Di data besar, bedanya langsung kerasa begitu sheet-nya hitung ulang.
Jadi kenapa dulu guru Excel (bukan Paman Excel ya *wink-wink*) kamu melarang TRUE? Ada dua alasan — dan dua-duanya bisa diakalin:
- Kolom lookup-nya harus tersusun ascending. Kalau belum diurutkan, trik buku telepon ini nggak jalan — hasilnya malah berantakan.
- Dia mengembalikan match yang paling dekat, bukan yang pas. Cari ID yang nggak ada, dan
TRUEdengan santainya kasih kamu tetangga terdekatnya, bukan error. Ini yang bahaya.
Alasan kedua ini yang bikin ngeri. Tapi kita bisa akalin.
Melihat masalah "closest match" itu secara nyata
Misalnya data kamu sudah tersusun begini — ID karyawan di kolom A, gaji di kolom B:
Sekarang
=VLOOKUP(1004;A:B;2;TRUE). Karyawan dengan ID 1004 itu nggak ada. Tapi TRUE nggak protes — dia jalan mundur ke ID terbesar yang nggak melebihi 1004, yaitu 1002, dan dengan pede mengembalikan 61.000 — nggak ada error, nggak ada peringatan, cuma gaji yang salah yang disodorkan dengan muka santuy.Itu ranjaunya. Sekarang kita jinakkan, sambil tetap pertahankan kecepatannya.
Trik 2 langkah: "fast exact match"
Idenya: pakai binary search yang cepat buat nemuin barisnya, lalu verifikasi apa itu memang baris yang kita cari. Kalau iya, kembalikan nilainya. Kalau bukan, bilang "tidak ditemukan." Kecepatan TRUE, keamanan FALSE.
Urutkan dulu tabel kamu ascending berdasarkan kolom lookup-nya, lalu:
=IF(VLOOKUP(A2;Data;1;TRUE)=A2;VLOOKUP(A2;Data;2;TRUE);"Tidak ditemukan")Kita bedah pelan-pelan:
VLOOKUP(A2;Data;1;TRUE)— lakukan approximate lookup yang cepat, ambil kolom kunci itu sendiri (kolom 1). Ini akan mendarat di match terdekat, dengan kecepatan binary search.=A2— cek: apa match terdekat itu betulan ID yang kita cari? Kalau iya, berarti datanya memang ada.- Kalau ada →
VLOOKUP(A2;Data;2;TRUE)mengambil nilai yang sebenarnya kita mau (kolom 2 — nilai di samping kunci) — sekali lagi lewat binary search. - Kalau nggak ada → kita kembalikan
"Tidak ditemukan", bukan angka yang salah tapi diam-diam.
Coba jalankan contoh 1004 tadi lewat formula ini: langkah 1 nemu 1002, langkah 2 nanya "apa 1002 = 1004?" — nggak — jadi hasilnya "Tidak ditemukan", bukan gaji palsu. Pas banget.
Ranjau dan solusinya dalam satu gambar.
TRUE polosan mengembalikan 61.000 untuk ID 1004 — yang sebetulnya tidak ada. Versi yang sudah diverifikasi dengan benar bilang Tidak ditemukan untuk 1004, dan tetap tepat dapat 58.000 untuk 1005 yang memang asli.Memang jadi dua kali lookup, bukan satu. Tapi dua-duanya sama-sama binary search, jadi digabung pun masih jauh lebih ngebut dibanding satu VLOOKUP linear exact-match yang biasa direkomendasikan. Kita hitung sekali lagi: di data sejuta baris, dua binary search kita cuma makan sekitar 40 perbandingan total. VLOOKUP "aman" yang biasa disaranin semua orang? Bisa sampai satu juta. Dua yang cepat masih menang telak lawan satu yang lambat.
Sekarang giliran punchline-nya: ubah jebakan jadi trik
Lihat lagi formula tadi — setiap lookup di situ diakhiri ; TRUE:
=IF(VLOOKUP(A2;Data;1;TRUE)=A2;VLOOKUP(A2;Data;2;TRUE);"Tidak ditemukan")Tapi kita sudah bahas panjang lebar di awal tadi bahwa menghilangkan argumen terakhir itu artinya TRUE. Dan di sini — beda dengan trik exact-match tadi — TRUE justru yang kita mau. Jadi, hapus saja. Dua-duanya:
=IF(VLOOKUP(A2;Data;1)=A2;VLOOKUP(A2;Data;2);"Tidak ditemukan")Binary search yang sama, verifikasi yang sama, jawaban yang sama — cuma lebih pendek. Ingat titik koma yang tadi Paman wanti-wanti? Itu jebakan cuma kalau di situ kamu maunya exact match. Di sini kita memang lagi main-main sama TRUE dengan sengaja, jadi gerakan yang sama malah berubah jadi keuntungan: defaultnya melakukan hal yang cepat secara gratis, dan kamu ketik lebih sedikit buat dapetin itu.
Buktinya — versi pendek (tanpa
; TRUE) dan versi panjang mengembalikan 58.000 yang sama untuk ID yang asli, dan Tidak ditemukan yang sama untuk yang hilang. Menghapus titik koma itu nggak mengubah apa-apa selain panjangnya formula.Kalau kamu lebih nyaman nulis TRUE-nya biar orang lain tahu itu disengaja, ya silakan — kecepatannya tetap sama. Tapi kalau mau yang paling pendek yang tetap jalan, itu dia jawabannya.
Satu catatan kecil sebelum lanjut. Kalau nilai yang dicari lebih kecil dari kunci paling pertama di tabel, VLOOKUP di dalamnya bakal mengembalikan
#N/A. Tangkap errornya dengan membungkus semuanya:=IFERROR( …formula di atas…;"Tidak ditemukan"). Sekarang setiap kegagalan mendarat dengan mulus.
Lebih suka pakai INDEX/MATCH? Ide yang sama — dan MATCH main game yang persis sama: argumen ke-3-nya juga defaultnya approximate (1), jadi bisa kamu hapus juga. Di Excel modern, hitung posisinya sekali pakai LET:
=LET(pos;MATCH(A2;Keys);IF(INDEX(Keys;pos)=A2;INDEX(Vals;pos);"Tidak ditemukan"))MATCH(A2;Keys) — tanpa argumen ke-3 — itu approximate (binary) match; baris INDEX(Keys;pos) = A2 itu pengecekan keamanan yang sama. (Bungkus juga dengan IFERROR, buat kasus nilai di bawah kunci pertama.)
Ikuti bareng-bareng —
Keys dan Vals cuma nama buat A3:A6 dan B3:B6. Satu cell, satu formula: 58.000 untuk 1005 yang asli, Tidak ditemukan untuk 1004 yang hilang.Belum punya LET? Excel versi lama? Jangan hitung MATCH dua kali — itu bikin pencarian yang tadi susah payah kamu percepat jadi dobel lagi. Simpan posisinya sekali di kolom bantu, terus pakai lagi:
H2: =MATCH(A2;Keys)
I2: =IF(INDEX(Keys;H2) = A2;INDEX(Vals;H2);"Tidak ditemukan")Satu binary search, dipakai dua kali. Sembunyikan kolom H kalau sudah selesai, dan nggak ada yang bakal tahu.
Ini dia triknya, terbuka lebar. Perhatikan kolom
pos — itu MATCH yang lagi nyari barisnya. Cari 1005 → pos 3 → 58.000. Cari 1004 → pos 2 (yang terdekat, 1002) → verifikasi menangkap ketidakcocokan → Tidak ditemukan. Cari 1009 → pos 4 → 72.000. Salin dua formula di baris paling bawah ke kolom B dan C, dan kamu bisa coba sendiri.Satu catatan jujur
Trik ini masih butuh satu syarat: urutkan kolom lookup-nya ascending. Tapi ada satu hal halus yang penting dipahami betul — dan kalau kamu pernah coba di data yang belum diurutkan dan ternyata tetap jalan, itu bukan halusinasi kamu.
Langkah verifikasi = A2 tadi memastikan formula ini cuma pernah mengembalikan nilai yang sudah dikonfirmasi exact match. Jadi walaupun datanya belum diurutkan, formula ini nggak akan pernah kasih kamu nilai yang salah — perlindungan yang nggak dimiliki VLOOKUP approximate biasa. Yang nggak bisa dijamin adalah arah sebaliknya: menemukan semua data yang sebenarnya ada. Di data yang belum diurutkan, binary search tetap lompat-lompat dan membagi dua seolah-olah lagi baca buku telepon yang sudah rapi, jadi dia bisa saja melewati kunci yang sebenarnya ada dan bilang "Tidak ditemukan" padahal barisnya cuma beberapa cell dari situ.
Makanya data yang belum diurutkan bisa kelihatan baik-baik saja: cari kunci yang kebetulan kejangkau sama pencariannya, dapat jawaban yang benar; cari yang nggak kejangkau, dapat "Tidak ditemukan" yang diam-diam salah. Kena atau tidaknya tergantung sepenuhnya gimana barisnya tersusun dan kunci mana yang kamu cari. Mau lihat gagalnya secara sengaja? Acak beberapa kunci jadi 5, 1, 3, 2, 4 terus cari 1 — pencariannya bisa saja melompatinya begitu saja. Urutkan kolomnya, dan 1 langsung ketemu.
Bukti catatan jujur ini — formula yang sama, kunci
1 yang sama. Di daftar yang diacak, hasilnya Tidak ditemukan, padahal 1 ada persis di posisi kedua. Urutkan kolomnya, dan langsung ketemu v1. (Versi approximate polosan juga nggak lebih baik — dia malah mengembalikan #N/A.)Jadi urutkan sekali, dan dua-duanya kekhawatiran itu hilang: setiap kunci yang memang ada pasti ketemu, dan ketemunya cepat. Kalau datamu sering berubah, jaga supaya tetap terurut — pakai Excel Table plus sort, atau langkah sort tiap kali refresh data. Mengurutkan itu biaya sekali bayar; lookup yang cepat itu keuntungan selamanya.
Satu jebakan lagi yang hampir pasti kena ke semua orang minimal sekali: jaga kolom kunci kamu satu tipe data saja. Kalau sebagian ID berupa angka asli sementara sebagian lagi teks yang cuma terlihat seperti angka — spasi nyempil di depan, tanda kutip aneh, kolom yang di-paste dari website — maka sorting dan binary search-nya bakal diam-diam kacau. Excel menyimpan angka dan teks di kelompok terpisah waktu mengurutkan, dan trik buku telepon tadi mengasumsikan satu urutan yang konsisten. Kalau lookup cepat kamu mulai gagal nemuin baris yang jelas-jelas ada, ini hampir selalu penyebabnya. Bersihkan dulu kolomnya jadi satu tipe (Text-to-Columns, atau lewat VALUE/TEXT), dan match-nya langsung pas lagi.
"Yaa tapi kan aku sudah pakai XLOOKUP"
Bagus — berarti kamu dapat mesin yang sama dengan saklar yang lebih rapi. XLOOKUP defaultnya juga linear exact match (aman, tapi linear), jadi di kolom besar yang sudah terurut, kasih dia argumen ke-6, search_mode, isi 2:
=XLOOKUP(A2;Keys;Vals;"Tidak ditemukan";0;2)2 artinya "binary search, ascending." Cerita kecepatan yang sama, sudah built-in, plus "Tidak ditemukan" yang bersih kalau nggak ketemu dan nggak perlu hitung-hitung nomor kolom yang rapuh. Excel lama? Trik VLOOKUP 2 langkah tadi versi kamu buat sulap yang sama persis.
Kapan ini beneran layak dipakai?
Jujur saja — nggak selalu. Cek cepat dulu:
- Sheet kecil (beberapa ratus baris), formulanya cuma segelintir? Nggak usah repot.
=VLOOKUP(…;)polosan sudah instan dan gampang. Pakai trik titik koma nyantol tadi, terus lanjutkan hidup kamu. - Tabel besar (puluhan ribu baris ke atas), dan banyak formula lookup yang hitung ulang bersamaan? Nah, di sinilah jalur cepat ini benar-benar berguna. Ini zona "kenapa file Excel-ku nge-freeze."
- Data yang bisa kamu jaga tetap terurut? Lampu hijau. Kalau memang sudah tersusun natural berdasarkan ID atau tanggal, kamu praktis sudah siap.
- Data yang berantakan dan susah diurutkan? Tetap pakai exact
FALSE/0, atau pindah ke XLOOKUP biar lebih gampang dibaca. Kebenaran data dulu, baru yang lain-lain.
Rangkuman Penutup
"Selalu pakai FALSE" itu bikin kamu aman — dia nggak pernah kasih jawaban yang salah. Yang dia nggak bisa lakukan adalah menyesuaikan skala. Di sheet kecil, itu nggak masalah sama sekali; di sheet besar, itu diam-diam menyedot waktu setiap kali hitung ulang, berulang-ulang.
Jadi ingak-ingak dua hal ini (ting!):
- Trik kilatnya —
FALSE,0, atau titik koma nyantol di ujung, semuanya berarti "exact." Tapi hati-hati sama titik komanya: hapus sepenuhnya, dan kamu sudah berubah jadiTRUE. - Jalur cepatnya — di data besar yang terurut, biarkan binary search nemuin barisnya, lalu verifikasi. Kamu dapat kecepatan
TRUEtanpa risiko yang bikin dia dilarang — dan karena jalur cepat ini memang maunyaTRUE, kamu bisa hapus argumennya sepenuhnya buat formula terpendek yang tetap jalan.
Urutkan data kamu, jalankan fast binary lookup-nya, verifikasi, dan file Excel kamu yang tadinya lemot langsung ngebut. Coba di sheet kamu yang paling lambat, terus perhatikan hitung ulangnya — jangan berkedip.
Semoga bermanfaat, ya!
Salam, Paman Excel







0 comments