Excel宏:检查当前单元格是否具有子字符串作为另一个单元格

时间:2016-10-15 11:13:09

标签: excel macros

不使用VBA(我可以在VBA中执行此操作,但只是想尝试宏是否也可以执行此操作,但我还没有想到它),

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

  

赖特

工作表B包含一列名称很好,但在一个单元格中包含更多像title这样的字母,例如:

  

先生。赖特

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

如果在表B中,如何编写具有某些功能的宏来实现:检查'Mr.Wright'是否在工作表A的单元格中有子字符串。

(我认为从表A开始可能更容易:可能使用正则表达式,首先使用INDEX或MATCH查找表B中的所有匹配。如果可以一次性从表B中完成,那就更好了) p>

2 个答案:

答案 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