Трохи переорганізувавши таблицю результатів, щоб забезпечити деяку гнучкість. Дивіться зображення внизу для ознайомлення з клітинками та викладайте їх. Замість того, щоб сказати про вищий ранг і 2-й ранг, я поставив заголовок вище, що сказав RANK, а потім під цим номером, що представляє позицію. Я зробив це, щоб ви могли просто перетягнути формулу вправо, і вона потягне за рангом на основі номера рангу в заголовку.
Використовуючи еталонні діапазони у наведеному нижче прикладі, розмістіть у J3 таку формулу та скопіюйте вниз та вправо за необхідністю.
=IFERROR(INDEX($2:$2,AGGREGATE(15,6,COLUMN($B$3:$H$3)/(INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)<>""),J$2)),"None")
ОНОВЛЕННЯ - Пояснення
дозволимо розбити цю формулу на окремі її компоненти
Почнемо з сукупної формули, в якій закопано пару формул:
AGGREGATE(15,6,COLUMN($B$3:$H$3)/(INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)<>""),J$2)
Причина, по якій я витягнув цю частину, полягає в тому, що все, що відбувається всередині неї, є масивом, як операції. Давайте поринемо трохи далі і подивимось частину матчу, а потім повернемося звідти:
MATCH($I3,$A$3:$A$6,0)
Ця формула поверне ціле число, яке відображає, де значення в I3 (січень) знаходиться у списку $ A $ 3: $ A $ 6. Іншими словами, ми намагаємось визначити, який рядок у вашій довідковій таблиці ви хочете переглянути. У цьому випадку його 1 для першого пункту у списку. Якщо січня не було в списку, то він поверне помилку, яка поширюватиметься за формулами.
Далі розглянемо формулу індексу:
INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)
INDEX(TABLE, ROWS TO GO DOWN, COLUMNS TO MOVE OVER)
Подумайте про формулу індексу як визначте свою таблицю, спустіться вниз Y рядки та перейдіть через X стовпців У цьому випадку $ B $ 3: $ H $ 6 представляє ваші дані без міток заголовка / рядка. MATCH
Формула говорить нам , скільки рядків йти вниз. 0 в кінці робить акуратний маленький трюк, який є особливим. Оскільки ви не можете перейти через 0 стовпців, в цьому спеціальному випадку 0 INDEX
інтерпретується це як прийняти всі стовпці, також відомі як весь рядок визначеної таблиці. на бічній примітці подібна річ відбувається, коли ви використовуєте 0 для того, скільки рядків потрібно опустити вниз.
Наступним кроком є робота масиву та порівняння.
INDEX() <> ""
В основному, це проходить через кожен стовпець і перевіряє, чи є запис пустим чи є щось у ньому. Якщо його порожнє, воно поверне FALSE, а не blank поверне TRUE. Тепер причина, яку ми робимо це, полягає в тому, що наступним кроком ми поділимо його на значення ІСТИНА або ЛЖА. Excel перетворює TRUE і FALSE відповідно до 1 і 0 відповідно, коли вони надсилаються через математичну операцію. Тож тут відбуваються дві важливі речі. Поділ на 1 не змінює значення нічого. вона по суті нічого не робить. Ділення на 0 спричиняє помилку на поділ на 0, що призведе до пропорції. Це насправді те, що нам потрібно. Тепер, що ми насправді ділимо?
COLUMN($B$3:$H$3)
Це все ще знаходиться у масиві формули сукупності. Таким чином, він створить список, оскільки масив перебирається через кожну комірку. Отже, в основному те, що відбувається, створюється список номерів стовпців SPREADSHEET. і що ще важливіше - список номерів стовпців електронних таблиць, розділених на 1, які ми хочемо, і розділених на 0, що дає помилку, яку ми не хочемо. Тому тепер давайте подивимось на сукупність:
AGGREGATE(15,6,COLUMN($B$3:$H$3)/(INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)<>""),J$2)
AGGREGATE(Function number, OPERATION #, formula, Option value)
В основному ми вибираємо функцію 15, яка буде сортувати список результатів функції та упорядковувати їх від найменших до найбільших. Функція 15 також змушує агрегат виконувати операції з масивом. Не всі номери функцій будуть. 6 розповідає сукупність значенням помилки IGNORE. Таким чином, всі ті, які поділяються на 0 помилок, ігноруються, як і потенційна помилка не знайдена помилка з функції відповідності. Формула, яку ми обговорювали вище про те, що вона робить, і значенням опціону в цьому випадку є те, яку позицію вгорі списку ви хочете. 1 поверне найменше число, 2 друге найменше число тощо. У цьому CASE я встановив його, щоб подивитися на номер у заголовку замість жорсткого кодування у формулу. Зрештою, AGGREGATE в цьому випадку поверне єдине ціле число, відповідне номеру стовпця SPREADSHEET, який ви шукаєте.
INDEX($2:$2,AGGREGATE(...))
У цьому випадку я взяв усі рядки 2 як таблиці. Оскільки лише 1 рядок, мені не потрібно вводити рядки вниз і стовпці, як у попередній таблиці. Це виглядає як список, і мені просто потрібно вказати, наскільки далеко в списку я хочу зайти. Отже, оскільки у нас є номер стовпця SPREADSHEET, нам потрібно переглянути весь рядок електронних таблиць, де ви заголовок, таким чином, номер стовпця електронної таблиці повертається сукупними рядками вгору з таблицею електронних таблиць в індексі.
У складі, де нікого не знайдено, IE немає рангу № 1, Aggregate повертає помилку. Для вирішення цього питання ми використовуємо функцію IFERROR. якщо помилки немає, функція функціонує як звичайна і повертає свій результат. Якщо є помилка, вона повертається в нашому випадку "немає".