Сравните все значения столбцов с отдельными ячейками в Excel - PullRequest
0 голосов
/ 17 апреля 2019

Я хотел бы выяснить, соответствует ли какая-либо строка в столбце C каким-либо ячейкам в столбце A или B, и вывести «yes» или «no» в соседней ячейке, если она совпадает.Совпадение может быть неточным, потому что идентификатор может быть записан как «12401», но совпадение в столбце может быть как «cf [12401]» с идентификатором, заключенным в скобки.

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

Пример Excel:

enter image description here

Если возможно, я бы хотел перечислить сами значения, которые совпали в столбце.Но эта часть была бы хорошим дополнением, в то время как другая часть более важна, потому что в среднем столбце около 6000 значений, так что на это потребуются дни.

Я пробовал разные вещи, как это:

=IF(COUNTIF(C2,"*" & A6 & "*" ), "Yes", "No") 

или

=IF(COUNTIF(C2,"*" & Length & "*" ), "Yes", "No")

они работают для отдельных слов или ячеек, но попытка проверить все значения в этом столбце по отношению к ячейке вернет no.Я пробовал варианты SUMPRODUCT и других, которые я нашел, но не смог получить что-то, что работает для нескольких значений.

Есть ли в Excel какая-нибудь функция, которая позволит мне это сделать?Или может быть путь в VBA?

1 Ответ

2 голосов
/ 17 апреля 2019

Вот некоторые UDF, которые вы можете использовать.

enter image description here

Dim MyArr As Variant, X As Double, LR As Double

Option Explicit

Public Function MatchID(RNG As Range) As String

With ActiveWorkbook.Sheets(RNG.Parent.Name)
    LR = .Cells(Rows.Count, 1).End(xlUp).Row
    MyArr = Application.Transpose(.Range(.Cells(2, 1), .Cells(LR, 1)))
    For X = LBound(MyArr) To UBound(MyArr)
        If InStr(1, RNG.Value, MyArr(X), vbTextCompare) > 0 Then
            If MatchID = "" Then
                MatchID = MyArr(X)
            Else
                MatchID = MatchID & ", " & MyArr(X)
            End If
        End If
    Next X
End With

End Function

Public Function MatchCFNAME(RNG As Range) As String

With ActiveWorkbook.Sheets(RNG.Parent.Name)
    LR = .Cells(Rows.Count, 1).End(xlUp).Row
    MyArr = Application.Transpose(.Range(.Cells(2, 2), .Cells(LR, 2)))
    For X = LBound(MyArr) To UBound(MyArr)
        If InStr(1, RNG.Value, MyArr(X), vbTextCompare) > 0 Then
            If MatchCFNAME = "" Then
                MatchCFNAME = MyArr(X)
            Else
                MatchCFNAME = MatchCFNAME & ", " & MyArr(X)
            End If
        End If
    Next X
End With

End Function

enter image description here

В D2 я использовал =IF(F2<>"","YES","") и тащил его вбок и вниз.

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