Как L oop через строки значений данных, которые разделены каналом, и проверить, соответствует ли какое-либо из значений предыдущей строке - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть набор данных, состоящий всего из 1 столбца и разделенный трубами и определить, равны ли какие-либо данные в строке N строке N-1. Я хотел бы иметь возможность вставить значение в соседний столбец, который помечается, когда это происходит с "Y" или "N".

В приведенном выше примере строка 2 не соответствует строке 1, но Строка 3 соответствует строке 2 из-за значения "6040"

Любые советы или предложения будут с благодарностью приняты

Любые рекомендации

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Предполагая, что данные находятся в столбце A, следующий код даст ожидаемый результат.

Private Sub Test()
Dim i As Integer
For i = 4 To 2 Step -1
    j = i - 1
    PrevTempStr = Cells(j, "A")
    CurTempStr = Cells(i, "A")
    PreVal = Split(PrevTempStr, "|") 'Converts into array
    CurVal = Split(CurTempStr, "|")
    If MatchArray(CurVal, PreVal) Then 'Function to check if any of the element of current array matches with previous array
        Cells(i, "B") = "Y" 'Update Value Y in B column if matches
    Else
        Cells(i, "B") = "N"
    End If
Next
End Sub


Private Function MatchArray(Arg1 As Variant, Arg2 As Variant) As Boolean

    For i = LBound(Arg1) To UBound(Arg1)
        For j = LBound(Arg2) To UBound(Arg2)
            If Trim(Arg1(i)) = Trim(Arg2(j)) Then
                MatchArray= True
                Exit Function
            End If
        Next j
    Next i
    MatchArray= False
End Function
0 голосов
/ 25 февраля 2020

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

Sub Main()
    Dim i As Long
    Dim j As Long
    Dim str As String
    Dim arr As Variant
    Dim arr2 As Variant 'array of the result
    Dim arrTemp As Variant
    Dim rng As Range

    'put everything into an array
    Set rng = Worksheets("Sheet1").UsedRange.Columns(1)
    arr = rng.Value
    arr2 = arr
    arr2(1, 1) = "" 'delete the first row since there won't be any value above it to compare

    'loop thru the array rows and split the values of each element and compare it with the element above it
    For i = 2 To UBound(arr, 1)
        arrTemp = Split(arr(i, 1), " | ")

        arr2(i, 1) = "No" 'assume there is no match at first
        For j = 0 To UBound(arrTemp)
            If InStr(arr(i - 1, 1), arrTemp(j)) > 0 Then
                arr2(i, 1) = "Yes"
                Exit For 'there was a match get out
            End If
        Next j
    Next i

    'paste the results
    rng.Offset(0, 1).Value = arr2

End Sub

Вывод

enter image description here

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