Код VBA, необходимый для циклического перебора строк данных различного размера и возврата значения MAX - PullRequest
0 голосов
/ 13 ноября 2018

В настоящее время я автоматизирую создание приборной панели, и у меня возникло некоторое препятствие. Мне нужен код, который пройдет около 7000 строк данных и вернет самое высокое значение в определенном столбце для каждого конкретного элемента. Данные копируются из сводной таблицы и разбиваются на секции строк, я прикрепил макет, как это выглядит.

enter image description here

Мне нужно самое высокое значение в столбце G для каждого портфеля, и мне нужно будет использовать код портфеля (например, XY12345 - они всегда 7 символов), чтобы отобразить это значение на панели инструментов.

Моя проблема в том, что у каждого портфеля разное количество строк для значений, а у некоторых пустые ячейки между ними, и поэтому я в тупике. Я надеялся использовать столбец J, чтобы подсчитать количество строк для каждого портфеля (поскольку в этом столбце нет разрывов для портфелей), а затем использовать цикл для циклического просмотра строк значений каждого портфеля, исходя из количества столбцов J, а затем вернуть наибольшее значение строки для каждого портфеля. Проблема в том, что я новичок в VBA и обучаю себя на ходу, и мне еще предстоит использовать цикл.

Большое спасибо,

Harry

1 Ответ

0 голосов
/ 13 ноября 2018

Если я правильно понимаю, вы ищете наибольшее значение в Column G.

Я не уверен, почему вы думаете, что вам нужен VBA для этого.


Получите максимальное значение столбца

Вы упомянули, что вы обеспокоены тем, что в каждом столбце нет одинакового количества ячеек, но это не имеет значения.как SUM игнорирует пустые ячейки , поэтому просто "идти долго" или - найти максимум всего столбца.

Чтобы вернуть наибольшее число в Column G вы можете использовать формулу рабочего листа:

=MAX(G:G)

Единственный улов в том, что вы не можете разместить эту формулу в любом месте столбца G, иначе она создасткруговая ссылка на ячейку (пытается бесконечно добавить число к себе).давайте пока поместим эту формулу в ячейку F1 (но в любом случае, кроме столбца G все будет в порядке).


Найдите расположение значения

Теперь, когда вы знаетеПо наибольшему значению вы можете определить , где использует функцию поиска, такую ​​как MATCH или VLOOKUP.Как и во многих вещах в Excel, есть несколько способов сделать то же самое.Я пойду с MATCH.

Заменить формулу сверху (в F1) на:

=MATCH(MAX(G:G),G:G,0)

Это вернет номер строки из first точное совпадение максимального значения Column G.


Что касается третьей части вопроса: возвращать код, такой как X12345, где существует значение, будет немного сложно, так как ваши данные не организованы в логическом табличном стиле ( табличное значение, "как таблица" ).

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

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

Мое предложение для быстрого исправления:

  1. Щелкните правой кнопкой мыши заголовок Column C и выберитеInsert для вставки пустого столбца.
  2. В C2 введите формулу: =IF(B2="",C1,LEFT(B2,7))
  3. Копировать ячейку C2
  4. Полностью выделить ячейки в столбце Cдо «конца» ваших данных, где бы это ни было ( не конец рабочего листа).Например, возможно, вы бы выбрали ячейки B2:B1000)
  5. Вставьте скопированную ячейку во все эти ячейки.

Теперь вы можете снова изменить формулу в F1:

=INDEX(C:C,MATCH(MAX(G:G),G:G,0))

Возвращает значение из Column C в той же строке, в которой находится максимальное значение Column G.

Это называется формулой INDEX/MATCH.

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

...