Your VLOOKUP Is Slow On Purpose (Here's the Fast One)

The trick hides in the "wrong" 4th argument — and in one little comma that changes everything.

Someone taught you one golden rule about VLOOKUP: always end it with FALSE. Exact match. Never TRUE. And that rule — as far as it goes — is fine. It's also quietly making your big workbooks crawl.

Here's the part nobody mentions: the exact-match VLOOKUP everyone swears by is the slow one. The "dangerous" approximate-match version — the one with TRUE — is the fast one. Much faster. We just have to tame it.

Let me show you something cool — like, really cool. But first, a tiny detour, because it turns out the door to the fast version has been sitting inside that 4th argument the whole time.

Quick hat trick: three ways to write "exact match"

You've been writing the formal, full-length version:

=VLOOKUP(value,range,col,FALSE)

Watch how short we can make that last argument.

Move 1 — swap FALSE for 0. To Excel, FALSE is 0. They're the same value wearing different clothes. So this is identical, and shorter:

=VLOOKUP(value,range,col,0)

Move 2 — leave it blank but keep the comma. An empty argument slot is read as 0, and 0 means FALSE. So this still does an exact match, with the fewest keystrokes of all:

=VLOOKUP(value,range,col,)

That's the hat trick: FALSE0(blank). Three spellings, one behavior. Feel free to use whichever you like — I've grown fond of the lonely trailing comma.

But don't drop that comma — and this is the whole point of today's post. Delete the comma too, and you haven't written "FALSE by omission." You've written the function's default — which for VLOOKUP is TRUE:

=VLOOKUP(value,range,col)     ← no comma = TRUE (approximate!)
=VLOOKUP(value,range,col,)   ← blank + comma = FALSE (exact)

Two formulas that look like twins, doing the exact opposite thing. One character between them.


Ran it live, looking up 25 in a tiny table. FALSE, 0, and the blank comma all say #N/A — exact match, and 25 isn't there. Drop the comma and it cheerfully returns Banana. That's TRUE sneaking in through the back door.

So file this away as a general habit: an empty argument (comma there, value gone) is read as 0/FALSE — a handy keystroke-saver across lots of functions. But fully dropping the comma hands control to the function's own default, and that default isn't always FALSE. VLOOKUP is living proof: its default is TRUE.

And that TRUE we keep tiptoeing around? That's the fast lane. Let's walk through it.

First, why FALSE is slow

When you write =VLOOKUP(id,Data,2,), Excel does the honest, plodding thing: it starts at the top of the lookup column and checks every single cell, one by one, until it finds your value. Row 1, row 2, row 3… all the way down.

On 100 rows, who cares. On 200,000 rows, with a few thousand of these formulas recalculating at once? Arrgh, what a slow, boring wait.

That's a linear search — "look at everything until you trip over the answer." Worst case, to find one value in a million rows, Excel makes a million comparisons. Now multiply that by every VLOOKUP on the sheet. That's your spinning cursor and your fan spinning up.

Why TRUE is fast: it stops looking at everything

Flip that last argument to TRUE (approximate match) and Excel switches to a completely different engine: a binary search.

Here's the plain-English version. Imagine finding "Nathan" in a paper phone book. You don't start at page 1 and read every name — that would be madness. You flip to the middle, land on "M," and think: too early, Nathan's after this. You throw away the entire first half. You flip to the middle of what's left, land on "R" — too far, back up. Throw away that half. A few flips and you're staring at Nathan.

That only works because the phone book is sorted. And it's brutally efficient: every flip throws away half of what's left.

  • Guess a number between 1 and 100 by halving each time → you're done in 7 guesses, tops.
  • Find one row in 1,000,000 → about 20 comparisons. Not a million. Twenty.

Put real numbers on it — worst-case comparisons to find one row:

RowsLinear (FALSE)Binary (TRUE)
1,000up to 1,000~10
100,000up to 100,000~17
1,000,000up to 1,000,000~20

Read that table sideways: every time your data grows ten times bigger, linear search gets ten times slower — while binary search adds just three or four comparisons. One approach checks everything; the other barely looks. On big data you feel that gap the moment the sheet recalculates.

So why did your guru ban TRUE? Two reasons — and both are fixable:

  1. It needs the lookup column sorted ascending. No sort, no phone-book trick — you'll get garbage.
  2. It returns the closest match, not the exact one. Ask for an ID that doesn't exist and TRUE cheerfully hands you the nearest neighbor instead of an error. Yikes.

Reason #2 is the scary one. But we can do better.

Seeing the "closest match" problem for real

Say your data is sorted like this — employee IDs in column A, salaries in column B:

A (ID)B (Salary)
100150,000
100261,000
100558,000
100972,000

Now =VLOOKUP(1004,A:B,2,TRUE). There is no employee 1004. But TRUE doesn't shrug — it walks back to the largest ID that's not over 1004, which is 1002, and confidently returns 61,000 — no error, no warning, just a wrong salary handed over with a straight face.

That's the landmine. Here's how we defuse it while keeping the speed.

The 2-step "fast exact match" trick

The idea: use the fast binary search to find the row, then verify it's actually the row we asked for. If it is, return the value. If it isn't, say "not found." The speed of TRUE, the safety of FALSE.

Sort your table ascending by the lookup column, then:

=IF(VLOOKUP(A2,Data,1,TRUE)=A2,VLOOKUP(A2,Data,2,TRUE),"Not found")

Reading it out loud, step by step:

  1. VLOOKUP(A2,Data,1,TRUE) — do a fast approximate lookup that brings back the key column itself (column 1). This lands on the closest match, at binary-search speed.
  2. = A2 — check: is that closest match actually the ID we asked for? If yes, the record truly exists.
  3. If it exists → VLOOKUP(A2,Data,2,TRUE) grabs the value we really wanted (column 2 — the value beside the key) — again by binary search.
  4. If it doesn't → we return "Not found" instead of a silently wrong number.

Run our 1004 example through that: step 1 finds 1002, step 2 asks "is 1002 = 1004?" — no — so we get "Not found" instead of a bogus salary. Exactly right.


The landmine and the fix in one shot. Bare TRUE hands back 61,000 for ID 1004 — which doesn't exist. The verified version correctly says Not found for 1004, and still nails 58,000 for the real 1005.

Two lookups instead of one, sure. But both are binary searches, so together they still leave a single linear exact-match VLOOKUP in the dust on large data. Put numbers on it one more time: on a million rows, our two binary searches cost about 40 comparisons total. The one "safe" linear VLOOKUP everyone recommends? Up to a million. Two of the fast thing still beat one of the slow thing, easily.

Now the punchline: turn the trap into the trick

Look at that formula again — every lookup in it ends in , TRUE:

=IF(VLOOKUP(A2,Data,1,TRUE) = A2,VLOOKUP(A2,Data,2,TRUE),"Not found")

But we spent the whole top of this post learning that omitting the last argument is TRUE. And here — unlike the exact-match hat trick — TRUE is exactly what we're after. So drop it. Twice:

=IF(VLOOKUP(A2,Data,1) = A2,VLOOKUP(A2,Data,2),"Not found")

Same binary search, same verify, same answer — just shorter. Remember the comma we warned you about? It was only a trap because there you wanted an exact match. Here we're playing with TRUE on purpose, so the same move turns into the goldmine: the default does the fast thing for free, and you type less to get it.


Proof — the short form (no , TRUE) and the long form return the same 58,000 for a real ID and the same Not found for a missing one. Dropping the comma changed nothing but the length.

If you'd rather keep TRUE written out so the next person knows it's deliberate, do — it's the same speed. But if you want the shortest thing that works, that's it.

One edge case, one wrap. If a lookup value can be smaller than your very first key, the inner VLOOKUP returns #N/A. Catch it by wrapping the whole thing: =IFERROR( …the formula above…,"Not found"). Now every miss lands softly.

Prefer INDEX/MATCH? Same idea — and MATCH plays the very same game: its 3rd argument defaults to approximate (1), so you can drop it too. In modern Excel, compute the position once with LET:

=LET(pos,MATCH(A2,Keys),IF(INDEX(Keys,pos)=A2,INDEX(Vals,pos),"Not found"))

MATCH(A2,Keys) — no 3rd argument — is the approximate (binary) match; the INDEX(Keys,pos) = A2 line is the same safety check. (Wrap it in IFERROR too, for the below-the-first-key case.)


Follow along — Keys and Vals are just names for A3:A6 and B3:B6. One cell, one formula: 58,000 for the real 1005, Not found for the missing 1004.

No LET yet — older Excel? Then don't compute MATCH twice; that doubles the search you just worked to speed up. Park the position once in a helper column and reuse it:

H2:  =MATCH(A2,Keys)
I2:  =IF(INDEX(Keys,H2) = A2,INDEX(Vals,H2),"Not found")

One binary search, used twice. Hide column H when you're done and no one's the wiser.


This is the whole trick laid bare. Watch the pos column — that's MATCH finding the row. Look up 1005 → pos 358,000. Look up 1004 → pos 2 (the nearest, 1002) → the verify catches the mismatch → Not found. Look up 1009 → pos 472,000. Copy the two formulas at the bottom into columns B and C and you're running it yourself.

One honest catch

This trick still wants one rule: sort the lookup column ascending. But here's a subtlety worth getting right — and if you've tested it on unsorted data and watched it still work, you weren't imagining things.

The = A2 verify step means the formula only ever returns a value it has confirmed is an exact match. So even on unsorted data it will never hand you a wrong value — protection a bare approximate VLOOKUP simply doesn't have. What it can't promise is the other direction: finding every record that's actually there. On unsorted data the binary search still jumps and halves as if it were reading a sorted phone book, so it can stroll right past a key that exists and report "Not found" for a row sitting a few cells away.

That's why unsorted data can look fine: query a key the search happens to reach and you get the right answer; query one it can't reach and you get a quiet, unmarked "Not found". Whether you hit it depends entirely on how the rows are arranged and which keys you look up. Want to see it miss on purpose? Scramble some keys to 5, 1, 3, 2, 4 and look up 1 — the search can skip right over it. Sort the column, and 1 turns up instantly.


Proof of the catch — same formula, same key 1. On the scrambled list it reports Not found, even though 1 is sitting right there at position two. Sort the column and it finds v1 instantly. (The bare approximate version doesn't fare better — it returns #N/A.)

So sort once and both worries disappear: every existing key is found, and found fast. If your data changes often, keep it sorted — an Excel Table plus a sort, or a sort step whenever you refresh. Sorting is a one-time cost; the fast lookups are forever.

And one trap that catches everybody at least once: keep your key column a single data type. If some IDs are real numbers while others are text that merely looks like a number — a stray leading space, a sneaky apostrophe, a column pasted in from a website — then both the sort and the binary search quietly go sideways. Excel files numbers and text into separate piles when it orders things, and the phone-book trick assumes one consistent order. If your fast lookup starts missing rows that clearly exist, this is almost always why. Clean the column to one type first (Text-to-Columns, or a VALUE/TEXT pass) and the matches snap back into place.

"But I already have XLOOKUP"

Good — then you get the same engine with a cleaner switch. XLOOKUP defaults to a linear exact match too (safe, but linear), so on a big sorted column, hand it the 6th argument, search_mode, set to 2:

=XLOOKUP(A2,Keys,Vals,"Not found",0,2)

2 means "binary search, ascending." Same speed story, built right in, plus a clean "Not found" on a miss and no fragile column-number counting. On older Excel? The 2-step VLOOKUP above is your version of the exact same magic.

When is this actually worth it?

Let's be honest — not always. A quick gut-check:

  • Small sheet (a few hundred rows), a handful of formulas? Don't bother. Plain =VLOOKUP(…,) is instant and dead simple. Move on with your life.
  • Big table (tens of thousands of rows and up), and many lookup formulas recalculating together? This is exactly where the fast path earns its keep. This is the "why is my workbook frozen" zone.
  • Data you can keep sorted? Green light. If it's naturally ordered by ID or date, you're basically already set up.
  • Data that's messy and unsortable? Stick with exact FALSE/0, or switch the sheet to XLOOKUP for readability. Correctness first, always.

Concluding Takeaway

"Always use FALSE" keeps you safe — it never returns a wrong answer. What it doesn't do is scale. On small sheets that costs you nothing; on big ones it quietly bleeds seconds on every recalculation, over and over.

So keep two things in your pocket:

  1. The hat trickFALSE, 0, or a lonely trailing comma all mean "exact." But mind that comma: drop it entirely and you've flipped to TRUE.
  2. The fast lane — on big, sorted data, let binary search find the row, then verify the hit. You get the speed of TRUE without the risk that got it banned — and since the fast path wants TRUE, you can drop the argument entirely for the shortest formula that works.

Sort your data, run the fast binary lookup, verify, and your laggy workbook wakes right up. Try it on your slowest sheet and watch the recalc — don't try to blink.

I hope this story useful to you!

Dikutip dari tulisan saya di Substack

Mengapa saya harus bersikap positif?

Dikutip dari jawaban saya di Quora 


Meskipun kamu akan tenggelam dalam kegelapan kehidupan, kamu masih memiliki kesempatan untuk menyingkirkan situasi ini.

Mengubah pola pikir kita dari negatif ke positif harus menjadi prioritas utama kita untuk tumbuh dan unggul dalam hidup. Kita harus meningkatkan sikap positif dalam diri kita, itulah alasan kita tidak boleh melewatkan meditasi teratur.

Jika kita menelusuri media sosial 1 jam secara teratur tanpa tujuan, kita tidak akan pernah positif dalam hidup. Menjadi positif dalam hidup sangat penting karena positivisme membuat hidup kita mudah, fleksibel, dan memberi harapan baru untuk menjalani hidup.

Beberapa tahun yang lalu, saya ingin menjadi biksu karena frustrasi pada diri sendiri dan masyarakat. Tapi saya kembali dari jalan itu. Menjadi biksu bukanlah satu-satunya cara untuk meninggalkan hasrat dari kehidupan dan menemukan kebahagiaan. Ada banyak cara lain untuk menemukan kebahagiaan dalam hidup.

Masyarakat kita menyarankan kita semua motivasi yang berpusat pada diri sendiri - cobalah untuk mementingkan diri sendiri, dapatkan tingkat yang lebih tinggi agar sesuai dengan pasar kerja, pastikan pekerjaanmu di perusahaan fortune 500, miliki inisiatif untuk memulai bisnis jutaan dolar kamu sendiri untuk mencapai gaya hidup mewah.

Selain berkencan atau menikahi anak perempuan / laki-laki cantik atau kelas atas, dapatkan kepuasan seksual yang tak terpadamkan, membesarkan anak, mengumpulkan kekayaan, membeli mobil mahal dan bepergian ke seluruh dunia hanya untuk memamerkan kepada orang-orang di media sosial betapa bahagia dan suksesnya!!

Jika tujuan utama hidupmu adalah untuk mendapatkan kesuksesan yang terobsesi dengan diri sendiri, banyak seks, persetujuan dari orang lain, uang, kenyamanan, gaya hidup yang berkilauan; hari ini atau besok hidupmu akan penuh dengan hal-hal negatif dan penderitaan. Pola pikir dan perasaan kita harus dibentuk sedemikian kuat sehingga kesuksesan dan kegagalan tidak menyentuh kita. Kita harus tabah, netral, tenang, diam tentang segalanya.

Kita seharusnya tidak bekerja keras untuk status sosial atau saldo bank kita, bekerjalah dengan keras karena kamu menyukainya dan itu juga akan membantu kesejahteraan orang lain. Jika kesuksesan datang dengan produk, itu bagus. Jika tidak demikian, jangan khawatir. Kita menyenangi pekerjaan kita, itu saja. Saya percaya bahwa “tidak ada kekuatan di dunia ini yang dapat mengalahkanmu, sampai dan kecuali kamu kehilangan dirimu sendiri”.

Kita harus bertindak dan berperilaku positif di setiap situasi. Orang yang positif selalu mengambil keputusan berharga dalam kehidupan yang baik untuknya dan masyarakat. Kita harus positif untuk mengelola stres kita, membantu orang lain, menjadi bahagia, dan bekerja untuk hasrat kita untuk mencapai tujuan yang lebih besar dalam hidup.

Lihatlah sejarah. Semua legenda dan orang-orang luar biasa seperti A.P.G Abdul Kalam, Nelson Mandela, Einestein, Walt Disney, Abraham Lincoln, OSHO selalu positif meskipun menghadapi kesulitan dalam hidup.

Pikiran kosong adalah penyebab semua perbuatan salah. Selalu berikan pikiranmu tujuan yang kuat atau melibatkannya dengan banyak pekerjaan. Jadi, tidak akan ada peluang untuk menjadi negatif.

Kelilingi pikiranmu dengan kegiatan positif seperti buku yang bagus, hasrat, mempelajari bahasa baru, menonton video yang mendidik tetapi menginspirasi, bepergian, bermain olahraga luar ruangan, berteman atau menghabiskan waktu dengan orang-orang positif dan sebagainya.

Kita beruntung dengan banyak sumber daya online yang produktif di era dunia modern. Kita harus menggunakannya untuk memperbaiki pola berpikir kita daripada membuang-buang waktu dengan menonton film porno atau kecocokan dalam Tinder.

Faktanya adalah tidak ada yang permanen di dunia ini. Bahkan kebahagiaan dan kesedihan akan datang secara alami dalam siklus hidup kita satu demi satu.

Jangan biarkan saat-saat buruk untuk mengatur hidupmu karena kamu lebih kuat dari penderitaanmu. Percaya itu. Hidup kita bukan untuk tahun yang tak terbatas. Setiap detik sangat berharga di sini. Permasalahanmu, kekalahanmu, kemunduranmu akan lenyap dengan upaya yang konsisten.

Jadi, teman-teman terkasih, jadilah positif, terus berjuang dan suatu hari nanti hari perjuanganmu yang belum pernah terjadi sebelumnya akan menciptakan pembelajaran dan inspirasi bagi miliaran orang.

I'm now on Quora

Apa contoh kecelakaan pesawat yang terkenal dengan akhir yang sangat baik?

Dikutip dari jawaban saya di Quora 

Cathay Pacific 780


Aksi heroik pilot di pesawat ini sering dipandang rendah dibandingkan dengan pesawat lain seperti Keajaiban di Hudson (bukan bermaksud untuk menyaingi Chesley Sullenberger).

Kejadiannya dimulai sebagai penerbangan normal dari Bandara Internasional Juanda Surabaya di Indonesia ke Bandara Internasional Hong Kong dan sebagian besar memang selalu normal. Sekitar dua jam dalam penerbangan, mesin #2 di pesawat berhenti berfungsi secara acak. Awak melakukan tindakan rutin untuk skenario itu dan mereka pikir semuanya terkendali dari sana. Mereka hanya meningkatkan dorongan mesin #1 untuk mengimbangi dorongan yang lebih rendah.

Tak lama setelah itu, ketika pesawat sedang menurunkan ketinggian dalam persiapan untuk pendekatan akhir, ketika mesin 1 berhenti. Mereka menyatakan “Mayday” karena mereka tidak lagi memiliki tenaga mesin. Setelah pilot melakukan beberapa perhitungan, mereka menyadari bahwa ada kemungkinan mereka tidak akan berhasil sampai ke Hong Kong. Putus asa untuk menghindari pendaratan darurat, kapten mencoba perlahan-lahan menggerakkan tuas dorong mesin #1. Dengan menggerakkan tuasnya ke depan, ia mampu menghidupkan kembali mesin dan mendorongnya hingga 74%. Segalanya tampak baik-baik saja sejak saat itu.

Mereka segera dihadapkan dengan masalah lain. Ketika mereka bersiap untuk mendarat di Hong Kong, mereka perlu menurunkan kecepatan. Ketika kru mencoba menurunkan daya dorong mesin #1, mereka mendapati dorongan mesin macet di 74%. Akibatnya, mereka terpaksa mendarat di 426 kpj. Itu 176 km per jam lebih dari kecepatan normal untuk Airbus A330. Tidak pasti bahwa mereka akan tetap di landasan setelah mendarat. Itu menjadi lebih buruk mengingat ada air di ujung bandara. Ketika pesawat mendarat, para kru melakukan segala yang mereka bisa untuk menghentikan pesawat. Flaps diperpanjang hingga maksimum, dorongan mundur diaktifkan, dan kapten menggunakan pengereman maksimum.

Untungnya, mereka dapat mendarat tanpa masuk ke air, tetapi masalah mereka belum berakhir. Karena kerasnya pesawat mengerem, bannya terlalu panas. Lima ban kempes dan dilaporkan ada asap dan api yang muncul dari situ. Karena itu, pesawat terpaksa melakukan evakuasi darurat, yang melukai 57 penumpang. Petugas pemadam kebakaran dapat memadamkan api dan semuanya baik-baik saja.

Pada akhirnya, tidak ada yang terluka serius, dan pilot mendaratkan pesawat dengan aman. Pilot, Kapten Malcolm Waters dan First Officer David Hayhoe menerima Polaris Awards, yang merupakan kehormatan tertinggi kepahlawanan dan penerbangan.

Setelah penyelidikan, ditentukan bahwa kecelakaan itu disebabkan oleh sistem bahan bakar. Ditemukan bahwa sistem bahan bakar terkontaminasi dengan partikel asing. Partikel-partikel asing menyebabkan katup bahan bakar mencengkam, sehingga tidak mungkin untuk mengontrol katup. Ternyata pipa pasokan bahan bakar di Bandara Juanda telah diperluas, tetapi tidak semua prosedur diikuti. Selain itu, pasokan bahan bakar telah terkontaminasi, sehingga partikel-partikel tadi memasuki sistem bahan bakar pesawat dan hampir menyebabkan bencana itu.

I'm now on Quora

Bagaimana mendapatkan teks dummy dengan cepat di Ms-Word?

Disadur dari tulisan saya di Quora.

Ketikkan formula di bawah ini dan tekan Enter:

=lorem()



Word akan menampilkan 3 kalimat dari lorem ipsum yang terkenal itu.

Atau kalau kamu ingin lebih banyak kalimat cukup tambahkan angka ke dalam tanda kurung setelah =lorem

Angka tersebut adalah jumlah kalimat yang diinginkan, misal:




Demikian, semoga membantu.

I'm now on Quora

Bagaimana pengalamanmu mendapatkan upah pertama dari Upwork?

Disadur dari tulisan saya di Quora.

Gondok kalau diingat-ingat

Saya mengenal dan bergabung dengan platform Upwork di tahun 2018.

Project yang diposting cukup beragam dan menarik, saya sendiri berfokus pada translation.

Setelah beberapa kali mengirimkan bid project, ada seorang calon klien yang melanjutkan ke sesi interview.