Алекс регулярно анализирует последние данные по строительной отрасли, и ему нужно писать статьи о данных. Часто ему нужно выделить какие-то новые данные, например, «строительство промышленных зданий было самым низким с августа 2019 года». Алекс задавался вопросом, есть ли способ автоматизировать этот тип выделения; если столбец A содержит месяц и год, а столбец B содержит значения для этих периодов, Алекс хотел бы получить формулу в столбце C, которая указывает «это значение является самым высоким с апреля 2019 года» или «это значение является самым низким с ноября 2016 года».

Предполагая, что месяц и год, перечисленные в столбце A, действительно являются значением даты в Excel (а не текстом), вы можете легко создать формулу для возврата желаемой информации. Если у вас есть строка 1, занятая заголовками столбцов, введите в ячейку C2 следующее:

=IF(ROW(B2)=2,"",IF(B2>MAX($B$1:B1), "this value is  the highest since " & TEXT(INDEX($A$1:A1,MATCH(MAX( $B$1:B1),$B$1:B1,0)), "mmmm yyyy"), IF(B2<MIN($B$1:B1), "this value is the lowest since " & TEXT(INDEX($A$1:A1, MATCH(MIN($B$1:B1),$B$1:B1,0)), "mmmm yyyy"),"")))

Помните, что это одна формула, и ее следует вводить в одной строке. Вы можете скопировать формулу вниз на необходимое количество строк в столбце C, и она должна предоставить желаемую информацию. Он делает запись в столбце C только в том случае, если значение в столбце B больше максимума или меньше минимума всех предыдущих значений в столбце B.

Если у вас на листе довольно много данных, вы можете заметить, что формула требует длительного пересчета. Если это так, то вы можете рассмотреть возможность использования макроса, который выполнит желаемый анализ и предоставит соответствующую информацию. Следующий макрос просматривает информацию в столбце B в обратном направлении и предоставляет результат «наименьшее с» и «наибольшее с» в столбцах C и D.

Sub FindHiLow()

Dim orig_cell As Range     Dim orig_val As Integer     Dim orig_row As Integer     Dim rownum As Integer     Dim newcell As Range     Dim new_val As Integer     Dim lowrow As Integer     Dim hirow As Integer

Set orig_cell = ActiveCell     orig_row = ActiveCell.Row     orig_val = orig_cell.Value

' find lowest     lowrow = 0     For rownum = orig_cell.Row - 1 To 1 Step -1         Set newcell = Cells(rownum, 2)

new_val = newcell.Value         If orig_val >= new_val Then             lowrow = rownum             Exit For         End If     Next     If lowrow = 0 Then lowrow = 1     Cells(orig_row, 3).Value = "Lowest since " & Cells(lowrow, 1)



' find highest     hirow = 0     For rownum = orig_cell.Row - 1 To 1 Step -1         Set newcell = Cells(rownum, 2)

new_val = newcell.Value         If orig_val <= new_val Then             hirow = rownum             Exit For         End If     Next     If hirow = 0 Then hirow = 1     Cells(orig_row, 4).Value = "Highest since " & Cells(hirow, 1)

End Sub

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (10183) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Determining_Highest_Since_or_Lowest_Since [Определение« Наивысшего с момента »или« Наименьшего с момента »].