VBA Как отобразить значение ячейки рядом с другой ячейкой? - PullRequest
1 голос
/ 25 января 2020

Попытка отобразить максимальный спрос и месяц, связанный с этим спросом. Столбец month - это столбец A, а спрос - столбец E. Я уверен, что моя проблема заключается в том, как я обращаюсь к MonthOf_Demand, но, похоже, не могу понять это сам. Любые намеки / советы / методы очень ценятся!

Это мое кодирование до сих пор:

Sub MonthHighestDemand()

Dim ws As Worksheet
Dim MonthOf_Demand As Date
Set ws = Sheets("DATA")

MonthOf_Demand = ActiveCell.Offset(0, -4)
Max_Demand = WorksheetFunction.Max(Columns("E"))


MsgBox "The maximum demand is " & Max_Demand & " which occurs at " &  MonthOf_Demand

End Sub

1 Ответ

1 голос
/ 25 января 2020

Что-то вроде кода ниже. Хотя я упомянул в своем комментарии VLookup, индекс / соответствие работает лучше, потому что vlookup может искать только первый столбец в диапазоне и возвращать значения из диапазона. Использование комбинации Index & Match позволяет возвращать результат из любого места. Приношу свои извинения за путаницу.

Приведенный ниже код работает следующим образом:

  • Найти последнюю строку данных
  • Найти максимальное требование от диапазона E2 до Elast_row
  • Значение максимального спроса - Double, это не было очевидно из вопроса
  • Используйте максимальное требование в качестве аргумента для Match, чтобы найти строку диапазона E2-Elast_row, в которой оно находится расположен
  • Используйте номер строки в качестве аргумента для индекса, чтобы найти месяц в диапазоне от А2 до Alast_row.

Я добавил «Явный вариант», поскольку это, как правило, хорошая идея и находит необъявленные переменные.

Option Explicit

Sub MonthHighestDemand()

Dim ws As Worksheet
Dim Last_Row As Long
Dim Max_Demand As Double
Dim RowOf_Demand As Long
Dim MonthOf_Demand As Date

Set ws = Sheets("DATA")
Last_Row = ws.Range("A1").CurrentRegion.Rows.Count

' =INDEX(A2:A<last_row>,MATCH(MAX(E2:E<last_row>),E2:E<last_row>, 0))
Max_Demand = Application.WorksheetFunction.Max(ws.Range("E2:E" & Last_Row))
RowOf_Demand = Application.WorksheetFunction.Match(Max_Demand, ws.Range("E2:E" & Last_Row), 0)
MonthOf_Demand = Application.WorksheetFunction.Index(ws.Range("A2:A" & Last_Row), RowOf_Demand)

MsgBox "The maximum demand is " & Max_Demand & " which occurs at " & MonthOf_Demand

End Sub

Я предположил, что данные расположены так, как показано на прилагаемом рисунке.

  • Заголовки столбцов
  • Месяцы в столбце A
  • Требование в столбце E

Использование следующих данных примера

Sample Data

Выполнение подпрограммы дает следующий результат .

Result of subroutine

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...