вернуть строку и столбец абсолютного значения в Excel VBA - PullRequest
0 голосов
/ 29 октября 2018

мой вопрос: почему ему не нравятся переменные AddressOfMaxRow и AddressOfMaxCol? Я идиот?

Function MaxABS(rng, AddressOfMaxRow, AddressOfMaxCol, MaxVal)

Dim arr As Variant

arr = rng.Value

For i = 1 To UBound(arr, 1)

    For j = 1 To UBound(arr, 2)
        arr(i, j) = VBA.Abs(arr(i, j))
    Next
Next

MaxVal = Application.WorksheetFunction.Max(arr)


AddressOfMaxRow = WorksheetFunction.Index(arr, WorksheetFunction.Match(WorksheetFunction.Max(arr), arr, 0)).Cells.Row

AddressOfMaxCol = WorksheetFunction.Index(arr, WorksheetFunction.Match(WorksheetFunction.Max(arr), arr, 0)).Cells.Column

End Function

1 Ответ

0 голосов
/ 29 октября 2018

Возможно, что-то вроде этого, который возвращает адрес (например, $D$9) ячейки "max", но может быть настроен так, чтобы при необходимости возвращать строку и столбец.

Обратите внимание, что это предполагает, что rng содержит только числовые значения и может быть увеличен до ошибки, например, если есть текст. Он также вернет первый адрес максимального значения только в том случае, если максимальное значение появляется более одного раза.

Function MaxABS(rng As Range) As String
    Dim arr As Variant
    arr = rng.Value

    Dim i As Long, j As Long
    Dim tempMax As Double
    Dim tempRow As Long, tempCol As Long

    For i = 1 To UBound(arr, 1)
        For j = 1 To UBound(arr, 2)
            arr(i, j) = VBA.Abs(arr(i, j))
            If arr(i, j) > tempMax Then
                tempMax = arr(i, j)
                tempRow = i
                tempCol = j
            End If
        Next j
    Next i

    MaxABS = rng.Cells(tempRow, tempCol).Address
End Function

Чтобы вернуть строку и столбец (разделенные запятой, поскольку желаемый формат вывода не был указан), замените последнюю строку

MaxABS = rng.Cells(tempRow, tempCol).Address

со следующим:

With rng.Cells(tempRow, tempCol)
    MaxABS = .Row & "," & .Column
End With

с примером выборки 9, 4 вместо $D$9.

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