Найти наибольшее число с условием - PullRequest
0 голосов
/ 07 июня 2019

Я хочу сделать макрос в VBA, в который я ввожу номер "Cliente", и он найдет в этой таблице самый высокий номер "Aditivo", который совпадает с номером "Cliente".

Например:

Если я введу «5», он должен вернуть «6». Если я введу «3», он должен вернуть «5»

enter image description here

1 Ответ

2 голосов
/ 07 июня 2019

Как уже говорили другие, вы можете уйти с формулой рабочего листа. Но если VBA необходимо, ну ... в любом случае используйте формулу рабочего листа:

Дайте попробовать:

Sub findHighestNo()

Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets("Sheet1")

Dim lRow As Long
lRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

Dim max_rng As Range
Set max_rng = ws.Range("B1:B" & lRow)

Dim cliente: cliente = InputBox("Select your cliente ID")
Dim Result

'    If IsNumeric(cliente) Then
'
'        Result = WorksheetFunction.MaxIfs(max_rng, max_rng.Offset(, -1), cliente)
'        MsgBox Result, vbInformation, "Max result"
'    Else
'        MsgBox "Input a number instead!"
'    End If

Dim arrData As Variant
arrData = max_rng.Offset(, -1).Resize(, 2)
Dim arrTmp() As Long: ReDim arrTmp(1 To lRow)

    If IsNumeric(cliente) Then
        Dim R As Long
        For R = LBound(arrData) To UBound(arrData)
            If arrData(R, 1) = CLng(cliente) Then
                arrTmp(R) = arrData(R, 2)
            End If
        Next R

        Result = WorksheetFunction.Max(arrTmp)
        MsgBox Result, vbInformation, "Max result"
    Else
        MsgBox "Input a number instead!"
    End If

End Sub

РЕДАКТИРОВАТЬ: Добавлена ​​альтернатива для получения MAX, так как MAXIFS доступен только в Office 365/2019 .

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