Я пытаюсь более полно автоматизировать расчет значений и сводных данных в электронной таблице, которую я веду о результатах матчей в бильярдной лиге.
У меня есть таблица с большим количеством информации о каждом матче, со следующими полями: Дата матча, Победитель, Начальный гандикап победителя, Конечный гандикап победителя, Проигравший, Начальный гандикап проигравшего, Конечный гандикап проигравшего, Время начала матча.
Гандикапы корректируются в конце каждого матча и перед следующим. Это больно — найти самую последнюю прошлую запись для игрока (мог бы быть Победителем или Проигравшим) и скопировать его конечный гандикап из этой записи в Начальный гандикап (победитель или проигравший) для того, который я сейчас ввожу.
Мне нужна формула, которая находила бы самую последнюю запись (самую высокую дату и время начала, если он играл дважды в один день), где он был победителем или проигравшим, а затем получала бы конечный гандикап (соответствующий победителю или проигравшему).
По предложению teylyn, вот ссылка на файл Dropbox. Соответствующая вкладка — Match Results:https://www.dropbox.com/s/1j9c6zsxjd3q4dt/Sample%20for%20Excel%20Question%20on%20Superuser.xlsx?dl=0
Я добавил пустой столбец L, чтобы проверить, сравнивая результаты с тем, что в K, чтобы увидеть, работают ли они, поэтому он там. Забыл удалить его, когда я поместил его в Dropbox.
решение1
Постановка задачи
Рабочий лист имеет имена в столбцах E
и X
. Для каждой строкиn
, ≠ . В столбце есть числа, соответствующие именам в столбце , и числа в столбце , соответствующие именам в столбце . Для любой строки после первой (скажем, строки 42) мы хотим получить значения для и из предыдущих строк, если это возможно.En
Xn
M
E
AG
X
K42
AF42
- Если
E42
есть «Джон», найдите самую последнюю строку, содержащую «Джон» (в столбцеE
илиX
). Назовите эту строкуn
. Если = «Джон», установить равным . Если = «Джон», установить равным .En
K42
Mn
Xn
K42
AGn
Если
X42
есть «Скотт», найдите самую последнюю строку, содержащую «Скотт» (в столбцеE
илиX
). Назовите эту строкуn
. Если = «Скотт», установить равным . Если = «Скотт», установить равным .En
AF42
Mn
Xn
AF42
AGn
Решение
В надежде сохранить здравомыслие, давайте используем вспомогательные столбцы; скажем, AR
и AS
. Предположим, что (как в файле примера) данные начинаются в строке 2. Введите
=MAX(($E$2:$E2=$E3)*(100*ROW($E$2:$E2)+COLUMN($M:$M)), ($X$2:$X2=$E3)*(100*ROW($X$2:$X2)+COLUMN($AG:$AG)))
в AR3
(пропуская AR2
). Завершите на Ctrl+ Shift+ Enter, чтобы сделать формулу массива. Аналогично, установите AS3
значение
=MAX(($E$2:$E2=$X3)*(100*ROW($E$2:$E2)+COLUMN($M:$M)), ($X$2:$X2=$X3)*(100*ROW($X$2:$X2)+COLUMN($AG:$AG)))
как формула массива. (Это то же самое, что и , AR3
за исключением того, что два вхождения $E3
были заменены на $X3
.)
Установлен K3
в
=IF($AR3=0, "?", INDEX($A$1:$BG$999, INT($AR3/100), MOD($AR3,100)))
и AF3
к
=IF($AS3=0, "?", INDEX($A$1:$BG$999, INT($AS3/100), MOD($AS3,100)))
(не как формулы массива). Они такие же, за исключением того, что три вхождения $AR3
были заменены на $AS3
.
И, конечно же, перетаскиваем/заполняем вниз.
Вспомогательные столбцы находят самые последние предыдущие появления имен — находят самые последние предыдущие появления и находят самые последние предыдущие появления — в основном путем нахождения максимального значения среди предыдущих строкARn
En
ASn
Xn
(предыдущее_значение"="это_значение) * РЯД())
т.е. наивысший номер строки, где имя совпадает. Затем он кодирует место, где имя было найдено, как
100*СТРОКА() + СТОЛБЕЦ(данные_мы_хотим_копировать)
Обе формулы смотрят в оба столбца E
и X
и возвращают закодированные координаты соответствующих столбцов M
или AG
ячейки. Затем формулы K
и AF
просто декодируют адрес ячейки и извлекают значение.
То же самое AR6
относится и к числу 213, поскольку «Джон» ( E6
) последний раз был замечен в строке 2, и поскольку он был замечен в E2
(а не X2
), мы хотим скопировать значение из столбца 13 (столбец M
).