(Menjawab di sini karena tidak ada pertanyaan terpisah untuk data yang diurutkan.)
Jika data yang diurutkan, Anda bisa menggunakan VLOOKUPdengan range_lookupargumen TRUE(atau dihilangkan, karena itu default), yang secara resmi dijelaskan untuk Excel sebagai "mencari pertandingan perkiraan".
Dengan kata lain, untuk data yang diurutkan:
- mengatur argumen terakhir untuk
FALSEmengembalikan nilai pertama , dan
- mengatur argumen terakhir untuk
TRUEmengembalikan nilai terakhir .
Ini sebagian besar tidak berdokumen dan tidak jelas, tetapi tanggal untuk VisiCalc (1979), dan hari ini memegang setidaknya dalam Microsoft Excel, LibreOffice Calc, dan Google Sheets. Hal ini pada akhirnya karena pelaksanaan awal LOOKUPdi VisiCalc (dan dari situ VLOOKUPdan HLOOKUP), ketika tidak ada parameter keempat. Nilai ditemukan oleh pencarian biner , menggunakan terikat kiri inklusif dan terikat kanan eksklusif (implementasi umum dan elegan), yang menghasilkan perilaku ini.
Secara teknis ini berarti bahwa seseorang memulai pencarian dengan interval kandidat [0, n), di mana npanjang array, dan kondisi loop invarian adalah bahwa A[imin] <= key && key < A[imax](batas kiri adalah <= target, batas kanan, yang dimulai satu setelah akhir, adalah > target; untuk memvalidasi, baik memeriksa nilai pada titik akhir sebelumnya, atau memeriksa hasil setelah), dan berturut-turut membagi dua dan memilih pihak mana saja yang mempertahankan invarian ini: dengan mengesampingkan satu sisi akan, sampai Anda mencapai interval dengan 1 term [k, k+1),, dan Algoritma kemudian kembali k. Ini tidak perlu kecocokan persis (!): Itu hanya kecocokan terdekat dari bawah. Dalam hal duplikat pertandingan, ini menghasilkan mengembalikan pertandingan terakhir , karena mengharuskan nilai berikutnya lebih besardaripada kunci (atau akhir array). Dalam kasus duplikat Anda memerlukan beberapa perilaku, dan ini masuk akal dan mudah diimplementasikan.
Perilaku ini dinyatakan secara eksplisit dalam artikel Pangkalan Pengetahuan Microsoft yang lama ini (penekanan ditambahkan): "XL: Cara Mengembalikan Pertandingan Pertama atau Terakhir dalam Array" ( Q214069 ):
Anda dapat menggunakan fungsi LOOKUP () untuk mencari nilai dalam array data yang diurutkan dan mengembalikan nilai terkait yang terkandung dalam posisi itu dalam array lain. Jika nilai pencarian diulang dalam array, itu mengembalikan kecocokan terakhir yang ditemui . Perilaku ini berlaku untuk fungsi VLOOKUP (), HLOOKUP (), dan LOOKUP ().
Dokumentasi resmi untuk beberapa spreadsheet mengikuti; tidak dalam perilaku "pertandingan terakhir" yang dinyatakan, tetapi tersirat dalam dokumentasi Google Sheets:
Microsoft Excel
TRUE mengasumsikan kolom pertama dalam tabel diurutkan baik secara numerik atau alfabet, dan kemudian akan mencari nilai terdekat .
Google Sheets :
Jika is_sortedini TRUEatau dihilangkan, pertandingan terdekat ( kurang dari atau sama dengan kunci pencarian) dikembalikan