Извините за неясное объяснение проблемы.Ниже я предоставил решение, которое я выбрал.Я искал код, который мог бы выполнить vlookup без возврата тех же значений.Ниже приведено решение.Я знаю, что код может быть не самым чистым и элегантным, но он эффективен и работает достаточно быстро для большой выборки данных.
Sub Matching()
Dim Search_Array As Variant
Dim Target_MatchValue As Variant
Dim Target_Range As Range
Dim arr As Variant
Dim counter As Integer
Dim n As Integer
'data must be ordered in order to apply the non-repetitive condition
Search_Array = Sheet1.Range("A2", Sheet1.Range("A1").End(xlDown)) 'use this array to loop through the value to search for
n = 0
Sheet1.Activate
With ActiveSheet
For counter = LBound(Search_Array) To UBound(Search_Array)
Target_MatchValue = 0
Target_MatchValue = Application.Match(Search_Array(counter, 1), .Range(Cells(2 + n, 4), Cells(1000, 4)), 0) 'This code will return the value used for the shifting range
Set Target_Range = .Range(Cells(2 + n, 4), Cells(1000, 5)) 'this is supposed to work as a shifting range allowing to match entries without making repetitions. I used the MATCH function in order to set the start of the range. i.e. if there is a match in the target table the range will shift from the location of the match downwards. If the match is at on the same level then it does not shift the range in order to match the same-level entry afterwards it is supposed to shift by one unit in order to prevent repetitions.
'target_range.select Activate this code in order to see the macro in action
arr = Application.VLookup(Search_Array(counter, 1), Target_Range, 2, False) 'store the vlookup value in an array in order to increase the efficiency the code and to speed up the whole proces
If IsError(arr) Then
.Cells(2 + n, 2).value = "" 'if the macro does not find anything, no value will be recorded anywhere
Else
.Cells(1 + n + Target_MatchValue, 2).value = Search_Array(counter, 2) 'Return the value of the search_array in this cell so to match column A values with column D values if they are found
End If
If IsError(arr) Then
n = n
ElseIf Target_MatchValue = 0 Then 'if the macro does not find anything, the shifting range does not shift so that subsequent values can be searched in the same range without missing precious matches
n = n + 1
ElseIf Target_MatchValue > 0 Then 'if there is a matching value between Column A and Column B, the shifting range shifts by the n + the distance between the the current vlookupvalue and the found value. Note that Data must be stored in a filtered order otherwise vlookup will not work correctly
n = n + Target_MatchValue
End If
Next counter
End With
End Sub
Обмениваясь идеями с некоторыми друзьями, мне сказали подумать о столбце потенциальных помощников, который будет использоваться для хранения добавочных чисел.Этот вспомогательный столбец будет хранить инкрементные числа, которые помогут выполнить условие неповторения.Пожалуйста, смотрите приведенный ниже пример.
Идея в том, что если в столбце E найдено значение, я сохраняю n равным найденному значениюв столбце помощника.Затем код должен проверить, больше ли будущие значения 'n, чем предыдущие n.Если это условие выполняется, то условие с одним повторением выполняется.n изменяет значение на следующее большее значение.Например, если я нахожу L в правой таблице, я сообщаю 96 как значение и сохраняю N равным 11. Когда я ищу следующее значение L, новое n должно быть больше текущего n, иначе я не буду хранитьновое найденное значение.Найденное значение 77 действительно имеет большее n, чем предыдущее значение, так как 12 больше 11. Надеюсь, это поможет.