Excelmacros:检查当前单元格是否有子string作为另一个单元格

如果不使用VBA(我可以在VBA中完成,但是想试试macros是否可以这样做,但是我还没有弄明白)

我有两张床单。 工作表A包括一列名称,如其单元格,如:

赖特

工作表B包含一列名字,但在一个单元格中包含更多字母,如:

赖特先生

工作表A到B处于一对多的关系(工作表A中的Wright可能与工作表B中的Mr.Wright有多个行)。

如果在表B中,如何编写一个具有某些函数的macros来实现:检查“Mr.Wright”是否在Sheet A的单元格中有子string。

(我认为从表A开始可能更容易:用正则expression式可能会更容易,先用INDEX或MATCHfind表B中的所有匹配项,如果可以从表B中一次完成则更好)

创build一个名为sub_in_name的macros。

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)是使这项工作的主要function。 Cells(i, 2 + x)基于列“A”中的非空单元格的数目进行索引

确保清除每个试验的细胞内容; 在“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 

大致相似的逻辑。 本来我想用现有的macrosfunction来做到这一点。 最后它最终就像做了一个定制的function,如下所示:

受到堆栈溢出中的另一个线程的启发。 我做了一个代码来完成像user3553260的检查。 但是我认为function也不是一个错误的select,考虑效率是不是这里最关心的问题。

 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