![](https://cdn.wiki-base.com/4883237/excel_formula_find_closest_match__2.png.webp)
Загальна формула
(=INDEX(data,MATCH(MIN(ABS(data-value)),ABS(data-value),0)))
Резюме
Щоб знайти найближчу відповідність у числових даних, ви можете використовувати INDEX та MATCH, за допомогою функцій ABS та MIN. У наведеному прикладі формула в F5, скопійована вниз, має вигляд:
=INDEX(trip,MATCH(MIN(ABS(cost-E5)),ABS(cost-E5),0))
де поїздка (B5: B14) і вартість (C5: C14) називаються діапазонами.
У F5, F6 та F7 формула повертає подорож, найближчу за вартістю, до 500, 1000 та 1500 відповідно.
Примітка: це формула масиву, і її потрібно вводити за допомогою control + shift + enter, за винятком Excel 365.
Пояснення
По суті, це формула INDEX і MATCH: MATCH визначає позицію найближчого збігу, подає позицію до INDEX, а INDEX повертає значення в цій позиції у стовпці Trip. Наполеглива робота виконується за допомогою функції MATCH, яка ретельно налаштована на відповідність "мінімальній різниці", наприклад:
MATCH(MIN(ABS(cost-E5)),ABS(cost-E5),0)
Беручи покрокові дії, значення підрахунку обчислюється з МІН та АБС так:
MIN(ABS(cost-E5)
Спочатку значення в E5 віднімається із зазначеної вартості діапазону (C5: C14). Це операція з масивом, і оскільки в діапазоні є 10 значень, результатом є масив із 10 значеннями, як це:
(899;199;250;-201;495;1000;450;-101;500;795)
Ці цифри представляють різницю між кожною вартістю в C5: C15 і вартістю в комірці E5, 700. Деякі значення є від’ємними, оскільки вартість нижча за кількість в E5. Для перетворення негативних значень у позитивні ми використовуємо функцію ABS:
ABS((899;199;250;-201;495;1000;450;-101;500;795))
який повертає:
(899;199;250;201;495;1000;450;101;500;795)
Ми шукаємо найближчий збіг, тому використовуємо функцію MIN, щоб знайти найменшу різницю, яка дорівнює 101:
MIN((899;199;250;201;495;1000;450;101;500;795)) // returns 101
Це стає значенням пошуку всередині MATCH. Масив підстановки генерується, як і раніше:
ABS(cost-E5) // generate lookup array
який повертає той самий масив, який ми бачили раніше:
(899;199;250;201;495;1000;450;101;500;795)
Тепер у нас є те, що нам потрібно, щоб знайти позицію найближчого збігу (найменша різниця), і ми можемо переписати частину MATCH формули так:
MATCH(101,(899;199;250;201;495;1000;450;101;500;795),0) // returns 8
Зі значенням 101 підстановки MATCH повертає 8, оскільки 101 знаходиться на 8-й позиції масиву. Нарешті, ця позиція подається в INDEX як аргумент рядка, а як масив називається відключення діапазону :
=INDEX(trip,8)
і INDEX повертає 8-ту поїздку в діапазоні "Іспанія". Коли формула копіюється до комірок F6 та F7, вона знаходить найбільш близьке співпадання до 1000 та 1500, "Франція" та "Таїланд", як показано.
Примітка: якщо є рівний результат, ця формула поверне перший збіг.
З XLOOKUP
Функція XLOOKUP забезпечує цікавий спосіб вирішити цю проблему, оскільки тип відповідності 1 (точна відповідність або наступний найбільший) або -1 (точна відповідність або наступний найменший) не вимагає сортування даних. Це означає, що ми можемо написати таку формулу:
=XLOOKUP(0,ABS(cost-E5),trip,,1)
Як і вище, ми використовуємо абсолютне значення (cost-E5) для створення масиву підстановки:
(899;199;250;201;495;1000;450;101;500;795)
Потім ми налаштовуємо XLOOKUP на пошук нуля, з типом відповідності, встановленим на 1, для точного відповідності або наступного найбільшого. Ми називаємо вказаний діапазон відхилення як масив повернення, тому результат є "Іспанія", як і раніше.