Поиск адреса наименьшего значения в диапазоне (Microsoft Excel)
При написании макроса вы можете найти наименьшее значение в диапазоне ячеек, используя метод WorksheetFunction для применения функции рабочего листа MIN. Однако вам может потребоваться не только найти наименьшее значение в диапазоне, но и адрес первой ячейки, содержащей это значение.
Один простой способ — просто пройти через диапазон, который вы хотите исследовать, и получить как наименьшее значение, так и адрес исследуемой ячейки, как показано ниже:
Function FindLowestAddr(pRng As Range) As String Dim MinVal As Double Dim MinAddr As String Dim c As Range MinVal = pRng.Cells(1).Value MinAddr = pRng.Cells(1).Address For Each c in pRng If c.Value < MinVal Then MinVal = c.Value MinAddr = c.Address End If Next c FindLowestAddr = MinAddr End Function
Обратите внимание, что этот подход вообще не полагается на функцию рабочего листа MIN. Однако у него есть недостаток — он не различает ячейки, содержащие числовые значения, и те, которые не содержат. Другими словами, если диапазон, переданный функции, содержит пустую ячейку, считается, что эта ячейка содержит нулевое значение, которое вполне может быть самым низким значением в диапазоне.
Один из способов обойти это — полагаться на функции рабочего листа из макроса. В следующем макросе используются функции рабочего листа MIN и MATCH для определения положения минимального значения, а затем индекса (смещения) этой ячейки в диапазоне.
Function GetAddr(rng As Range) As String Dim dMin As Double Dim lIndex As Long Dim sAddress As String With Application.WorksheetFunction dMin = .Min(rng) lIndex = .Match(dMin, rng, 0) End With GetAddr = rng.Cells(lIndex).Address End Function
Следует отметить, что если вы используете макрос только для обнаружения адреса, потому что вы полагали, что невозможно получить желаемую информацию без макроса, то вы можете полностью отказаться от макроса, используя формулу рабочего листа. Например, если вы хотите определить адрес ячейки с наименьшим значением в именованном диапазоне MyRange, вы можете использовать следующее:
=ADDRESS(ROW(MyRange)+MATCH(MIN(MyRange),MyRange,0)-1,COLUMN(MyRange))
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (12744) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Finding_the_Address_of_the_Lowest_Value_in_a_Range [Поиск адреса самого низкого значения в диапазоне]
.