Как автоматически сортировать таблицу в Excel каждый раз, когда обновляется одно из ее значений?

14938
adustybowler

Я сохраняю результаты сезона бейсбольной настольной игры Strat-O-Matic в электронной таблице Excel (Excel 2011 для Mac). Лист имеет расписание лиги и лиги. Я уже настроил его так, чтобы каждый раз, когда я вводил счет игры, турнирная таблица обновлялась, чтобы отразить новые рекорды побед-поражений команд, которые участвовали в этой игре.

После того, как я введу счет игры, я бы хотел, чтобы турнирная таблица сортировалась автоматически, а не сортировалась вручную по процентам выигрышей. Если это имеет значение, на самом деле есть четыре разных турнирных таблицы, по одной на каждое из четырех подразделений в этой лиге. Все они должны быть индивидуально отсортированы по процентам выигрышей при каждом обновлении таблицы.

Любая помощь приветствуется, спасибо.

1

1 ответ на вопрос

2
Kenneth L

Для сортировки таблицы вам нужно написать скрипт VBA. Вообще говоря, формула в ячейке не может влиять на содержимое другой ячейки (точнее, формула другой ячейки; одна ячейка может изменить значение других ячеек, если другие ячейки содержат формулу, которая ссылается на нее).

В качестве обходного пути, так как вы собираетесь сортировать таблицу назначения (т.е. таблицы) после обновления исходной таблицы (например, расписание), мы можем выполнить некоторую сортировку косвенно:

  1. Измените исходную таблицу, чтобы рейтинг автоматически рассчитывался
  2. Обновите таблицу назначения, чтобы ее содержимое было найдено из исходной таблицы VLOOKUP.

Шаг 1

Сделайте ранжирование по первому столбцу (т.е. столбцу A в этом примере) и сделайте формулу следующим образом:

 A | B | C --------------------------------------------------+------+------------------- Rank | Team | Winning Percentage =COUNTIF(C$2:C$9,">"&C2)+1 | A | 0.05 =COUNTIF(C$2:C$9,">"&C3)+COUNTIF(C$2:C2, C3)+1 | B | 0.99 =COUNTIF(C$2:C$9,">"&C4)+COUNTIF(C$2:C3, C4)+1 | C | 0.81 =COUNTIF(C$2:C$9,">"&C5)+COUNTIF(C$2:C4, C5)+1 | D | 0.92 =COUNTIF(C$2:C$9,">"&C6)+COUNTIF(C$2:C5, C6)+1 | E | 0.54 =COUNTIF(C$2:C$9,">"&C7)+COUNTIF(C$2:C6, C7)+1 | F | 0.15 =COUNTIF(C$2:C$9,">"&C8)+COUNTIF(C$2:C7, C8)+1 | G | 0.15 =COUNTIF(C$2:C$9,">"&C9)+COUNTIF(C$2:C8, C9)+1 | H | 0.40 

Пожалуйста, обновите диапазон самостоятельно. Первая COUNTIFподсчитывает, сколько команд имеет процент выигрыша выше, а вторая COUNTIFподсчитывает, сколько команд связано с ним. Это важно, потому что нам не нужно, чтобы дублирующийся рейтинг сбивал с толку VLOOKUP.

Например, приведенный выше пример выглядит так:

Rank | Team | Winning Percentage 8 | A | 5% 1 | B | 99% 3 | C | 81% 2 | D | 92% 4 | E | 53% 6 | F | 15% 7 | G | 15% 5 | H | 40% 

Как вы видите, команда F и команда G имеют одинаковый процент выигрыша, им присваивается разный рейтинг.

Шаг 2

В вашей таблице назначения (то есть в турнирной таблице) вам необходимо обновить ее, используя множество VLOOKUP:

 A | B | C -----+---------------------------------------------+------------------------------------------ Rank | Team | Winning percentage 1 | =VLOOKUP($A2,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A2,Schedule!$A$1:$C$9,3,FALSE) 2 | =VLOOKUP($A3,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A3,Schedule!$A$1:$C$9,3,FALSE) 3 | =VLOOKUP($A4,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A4,Schedule!$A$1:$C$9,3,FALSE) 4 | =VLOOKUP($A5,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A5,Schedule!$A$1:$C$9,3,FALSE) 5 | =VLOOKUP($A6,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A6,Schedule!$A$1:$C$9,3,FALSE) 6 | =VLOOKUP($A7,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A7,Schedule!$A$1:$C$9,3,FALSE) 7 | =VLOOKUP($A8,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A8,Schedule!$A$1:$C$9,3,FALSE) 8 | =VLOOKUP($A9,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A9,Schedule!$A$1:$C$9,3,FALSE) 

И вы получите свои результаты, как:

Rank | Team | Winning percentage 1 | B | 99% 2 | D | 92% 3 | C | 81% 4 | E | 53% 5 | H | 40% 6 | F | 15% 7 | G | 15% 8 | A | 5% 

Похожие вопросы