Excel VBA文本比较

Excel VBA文本比较,excel,vba,Excel,Vba,我对VBA比较陌生,我正在尝试编写一个宏来比较两列数据的名字和姓氏。在遍历列时,任何时候first name=last name,即,它们都是空的或说UNKNOWN,我希望第9列中的单元格被清除,第10列中的单元格得到UNKNOWN值 到目前为止,代码可以正确识别任何时候的名字和姓氏相同。我的问题是,任何时候名字都是姓氏的子字符串,即单元格I2=David J2=Jones,I3=Joseph J3=Davidson David与Davidson进行比较,然后被删除 我花了一段时间寻找类似的问题

我对VBA比较陌生,我正在尝试编写一个宏来比较两列数据的名字和姓氏。在遍历列时,任何时候first name=last name,即,它们都是空的或说UNKNOWN,我希望第9列中的单元格被清除,第10列中的单元格得到UNKNOWN值

到目前为止,代码可以正确识别任何时候的名字和姓氏相同。我的问题是,任何时候名字都是姓氏的子字符串,即单元格I2=David J2=Jones,I3=Joseph J3=Davidson David与Davidson进行比较,然后被删除

我花了一段时间寻找类似的问题,到目前为止,我还没有能够适应我的问题。提前感谢您的帮助

 Sub compare_cols()

Dim Report As Worksheet
Dim i As Integer, j As Integer
Dim lastRow As Integer

Set Report = Excel.ActiveSheet

lastRow = Report.UsedRange.Rows.count 

Application.ScreenUpdating = False

For i = 1 To lastRow ' This will find all identical pairs of cells in I,J (blank, blank) or (unknown, unknown). I stays blank, J gets UNKNOWN
    For j = 1 To lastRow    ' I think its currently erasing any matches (ex. if someones first name is James, it will get erased if there is a last name jameson)
            If InStr(1, Report.Cells(j, 10).Value, Report.Cells(i, 9).Value, vbTextCompare) > 0 Then
                Report.Cells(i, 9).Value = ""
                Report.Cells(i, 10).Value = "UNKNOWN"
                Exit For
            Else
            End If
    Next j
Next i
Application.ScreenUpdating = True
End Sub

与其他一些语言不同,您可以在vba中使用=符号比较字符串,这样可以找到精确的匹配项,这似乎就是您要查找的内容。试一试

if Report.Cells(j, 10) = Report.Cells(i, 9) etc.

我用If语句替换了你的If语句,现在子字符串不再被删除。但是,任何相同匹配的名字和姓氏仍将被删除。知道如何使单元格I2只与单元格J2比较,而不是与列J比较吗@Matt CremeensThen只使用一个循环和一个循环变量。这将确保您只需对每一列的同一行进行向下比较。我删除了内部for循环和出口for,现在它可以工作了!谢谢你的帮助@Matt Cremeens