不使用VBA(我可以在VBA中执行此操作,但只是想尝试宏是否也可以执行此操作,但我还没有想到它),
我有两张纸。表A包括一列名称,例如其单元格:
赖特
工作表B包含一列名称很好,但在一个单元格中包含更多像title这样的字母,例如:
先生。赖特
工作表A到B的关系是一对多关系(工作表A中的Wright可能在工作表B中与Mr.Wright有多行)。
如果在表B中,如何编写具有某些功能的宏来实现:检查'Mr.Wright'是否在工作表A的单元格中有子字符串。
(我认为从表A开始可能更容易:可能使用正则表达式,首先使用INDEX或MATCH查找表B中的所有匹配。如果可以一次性从表B中完成,那就更好了) p>
答案 0 :(得分:1)
创建一个名为sub_in_name的宏。
Option Explicit
Sub sub_in_name()
Dim x, i As Long
Dim endofcells1, endofcellsmany As Long
endofcells1 = WorksheetFunction.CountA(Range("A:A"))
endofcellsmany = WorksheetFunction.CountA(Range("B:B"))
For x = 1 To endofcells1
For i = 1 To endofcellsmany
If (InStr(1, Cells(i, 2), Cells(x, 1), vbTextCompare)) Then
Cells(i, 2 + x).Value = "True"
Else
Cells(i, 2 + x).Value = "False"
End If
Next i
Next x
End Sub
Intr(start, SearchStr, SearchInStr, vbaoption)
是使这项工作的主要功能。根据“A”列中非空单元格的数量索引Cells(i, 2 + x)
确保清除每次试验的细胞含量;在“B”栏之后。
例如放在“A”栏中。列“B”,您将获得列“C:D”
Column "A" Column "B" Column "C" Column "D"
Wright Mr. Wright True False
Roger Wright Jr. True False
Wright the Ivth. True False
Sally False False
答案 1 :(得分:0)
大致相似的逻辑。最初我想使用现有的宏功能来完成它。最后它最终像制作如下的定制功能:
受到堆栈溢出中另一个线程的启发。我做了一个代码来完成像user3553260那样的全面检查。但我认为功能也不是一个糟糕的选择,考虑效率是否不是最重要的问题。
Function LookupName(lookupValue As Variant, lookupRange As Range) As String
Dim r As Long
Dim c As Long
Dim s As String
s = "No"
For r = 1 To lookupRange.Rows.Count
For c = 1 To lookupRange.Columns.Count
If Not IsEmpty(lookupRange.Cells(r, c).Value) Then
If InStr(LCase(lookupValue), LCase(lookupRange.Cells(r, c).Value)) Then
s = "Yes"
Exit For
End If
End If
Next
Next
LookupName = s
End Function