#excel
#excel
Вопрос:
Привет, как я могу найти две частично совпадающие ячейки?
Например:
A1 содержит яблочно-морковного слона на листе 1
B2 содержит яблочно-бананово-морковные напитки на листе 2
После этого он выведет разницу рядом с ячейкой 5 рабочего листа 2
C2 содержит банановые напитки на листе 2
Спасибо
Public lRowA as Long
Public lRowB as Long
Sub compare()
dim LCA as interger
dim LCB as interger
Sheet1.Activate
call rangemethodA
Sheet2.Activate
call rangemethodB
For LCA= 2 to lRowA
For LCB= 2 to lRowB
if InStr(Sheets("Sheet1").Range("B" amp; LCB), Sheets("Sheet2").Range("A" amp; LCA)) > 0 Then
WORDDIF (Sheets("Sheet1").Range("A" amp; LCA), Sheets("Sheet2").Range("B" amp; LCB))
Sheets("Sheet1").Range("C" amp; LCB).value = WORDDIF
Else
Goto NextLCB
Endif
NextLCB:
Next LCB
Next LCA
End sub
Function WORDDIF(rngA As Range, rngB As Range) As String
Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String
WordsA = Split(rngA.Text, " ")
WordsB = Split(rngB.Text, " ")
For ndxB = LBound(WordsB) To UBound(WordsB)
For ndxA = LBound(WordsA) To UBound(WordsA)
If StrComp(WordsA(ndxA), WordsB(ndxB), vbTextCompare) = 0 Then
WordsA(ndxA) = vbNullString
Exit For
End If
Next ndxA
Next ndxB
For ndxA = LBound(WordsA) To UBound(WordsA)
strTemp = strTemp amp; IIf(WordsA(ndxA) <> vbNullString, WordsA(ndxA), "-") amp; " "
Next ndxA
WORDDIF = Trim(strTemp)
End Function
Комментарии:
1. Вы могли бы использовать Power Query; создайте два
Lists
из каждой строки; иRemoveMatchingItems
во втором списке совпадают с первым.
Ответ №1:
Одним из способов было бы использовать пользовательскую функцию и использовать цикл Split
, предполагая, что разделителем всегда является пробел.
Function CompareDiff(v1 As Variant, v2 As Variant) As String
Dim a1, a2, i As Long
a1 = Split(v1, " ")
a2 = Split(v2, " ")
For i = LBound(a2) To UBound(a2)
If IsError(Application.Match(a2(i), a1, 0)) Then
CompareDiff = CompareDiff amp; a2(i)
End If
Next i
End Function
Назовите это так:
Sub xx()
'call function thus
Worksheets("Sheet2").Range("C2").Value = CompareDiff(Worksheets("Sheet1").Range("A1"), Worksheets("Sheet2").Range("B2"))
End Sub
Конечно, более очевидное использование находится непосредственно на листе, как обычная формула, например
=CompareDiff(A1,B1)
Комментарии:
1. Спасибо, я попробую.