Индекс VBA / Совпадение с несколькими критериями (уникальное значение и дата)

У меня есть таблица, которая имеет значения более одного месяца, поэтому я пытаюсь сначала найти значение на основе значения в рабочем листе wsRevFile, а затем убедиться, что это значение за последний месяц. Когда я использую следующий код, я получаю ошибку «недопустимое количество аргументов».

Sub RevLookup(wsMvFile As Worksheet, wsRevOld As Worksheet, wsNewRev As Worksheet, _ rowCount As Integer, workCol As String, _ srcCol1 As Integer, srcCol2 As Integer) Dim vrw As Variant, i As Long For i = 2 To rowCount vrw = Application.Match(wsRevFile.Range("A" & i), wsNewRev.Columns(2), Format(DateSerial(Year(Date), Month(Date), 0), "mm/dd/yyyy"), wsNewRev.Columns(1), 0) If IsError(vrw) Then vrw = Application.Match(wsRevFile.Range("A" & i), wsRevOld.Columns(1), 0) If Not IsError(vrw) Then _ wsRevFile.Range(workCol & i) = Application.Index(wsRevOld.Columns(srcCol1), vrw) Else wsRevFile.Range(workCol & i) = Application.Index(wsNewRev.Columns(srcCol2), vrw, 1) End If Next i End Sub 

Я предполагаю, что это связано с тем, как я назначил функцию сопоставления приложений, потому что формула без этой части работает для других столбцов. Любые идеи о том, как я могу заставить это работать?

Спасибо за вашу помощь!

Попробуйте изменить переменные следующей процедуры, так как я не понял ваши входные и выходные данные:

 Sub Main() Dim SearchValue As Variant Dim SearchColumn As Range Dim ReturnColumn As Range Dim ResultRows As Collection Dim LastDate As Variant 'Date? Dim iRow As Variant SearchValue = 10 '<-- change to suit Set SearchColumn = wsNewRev.Range("B1:B10") Set ReturnColumn = wsNewRev.Range("C1:C10") '<-- change to suit Set ResultRows = GetLoopRows(SearchColumn, SearchValue) For Each iRow In ResultRows If LastDate < ReturnColumn(iRow) Then LastDate = ReturnColumn(iRow) End If Next iRow Debug.Print LastDate End Sub Function GetLoopRows(ParamArray pParameters() As Variant) As Collection 'Obtém limites de laços com levando em conta condições '[vetor1], [valor1], [vetor2], [valor2], ... Dim iCondition As Long Dim i As Variant Dim iRow As Variant Dim Result As Collection Dim NumConditions As Long Dim SearchCollection As Collection Dim ArraysCollection As Collection Dim iArray As Variant NumConditions = (UBound(pParameters) - LBound(pParameters) + 1) / 2 Set ArraysCollection = New Collection Set SearchCollection = New Collection For i = LBound(pParameters) To UBound(pParameters) Step 2 ArraysCollection.Add pParameters(i + 0).Value2 SearchCollection.Add pParameters(i + 1) Next i Set Result = New Collection For iRow = LBound(ArraysCollection(1)) To UBound(ArraysCollection(1)) For iCondition = 1 To NumConditions If ArraysCollection(iCondition)(iRow, 1) <> SearchCollection(iCondition) Then GoTo Continue Next iCondition Result.Add CLng(iRow) Continue: Next iRow Quit: Set GetLoopRows = Result End Function 
Interesting Posts

Прокрутка по сводным таблицам и удаление одинаковых значений

Печать вывода в Excel

EXCEL: объединение SUMIFS с несколькими VLOOKUP из-за небольших различий в именах

Агрегация числовых значений в столбце на основе общего значения: Excel VBA

excel, писать на основе другого значения ячейки

Есть ли способ пропустить формулу, если условие не выполняется в Excel?

Кнопка Command для изменения значения ячейки в неизвестном имени. Откройте книгу.

Комплексный COUTIF?

Узнайте последний использованный столбец в данной строке – Excel VBA

Excel, растягивающий текст в ячейках

Неустранимая ошибка: Uncaught PHPExcel_Calculation_Exception

Зацикливание через строку в excel, замена Chars на Алфавит

Определяемый пользователем или объектно-зависимый оператор IF ошибки

Последний использованный столбец только до определенного последнего столбца

Событие Mousedown для управления рамкой не всегда срабатывает

Давайте будем гением компьютера.