比较vba excel中的两个string

我需要比较列“厨师”的每个单元格列“nom”的每个单元格,以便我可以find正确的“matricule”,并将其存储在“马特”,我试过这个这个VBA代码:

Sub compare() Dim p As Integer Dim q As Integer Dim Nom As String Dim Nomchercher As String Dim Matr As String p = 0 q = 0 For j = 1 To 10 p = p + 1 Cells.Find("Chef").Select ActiveCell.Range("a1").Offset(p, 0).Activate ActiveCell.Select AdresseTexte1 = ActiveCell.Address(0, 0) Nomchercher = Range(AdresseTexte1) For i = 1 To 10 q = q + 1 Cells.Find("Nom").Select ActiveCell.Range("a1").Offset(q, 0).Activate AdresseTexte2 = ActiveCell.Address(0, 0) Nom = UCase(Range(AdresseTexte2)) Cells.Find("Matricule").Select ActiveCell.Range("a1").Offset(q, 0).Activate AdresseTexte3 = ActiveCell.Address(0, 0) Matr = UCase(Range(AdresseTexte3)) Cells.Find("Matt").Select ActiveCell.Range("a1").Offset(p, 0).Activate Temps = InStr(1, UCase(Nom), UCase(Nomchercher), vbTextCompare) If Temps <> 0 Then ActiveCell.Value = Matr End If Next i q = 0 Next j End Sub 

但它给了我这个结果:

http://i.stack.imgur.com/iiPLe.jpg

我不知道为什么显示“48”,有什么帮助?

问题出在InStr函数 – > https://msdn.microsoft.com/en-us/library/8460tsh1%28v=vs.90%29.aspx

Temps = InStr(1, UCase(Nom), UCase(Nomchercher), vbTextCompare)

您在UCase(Nom)查找UCase(Nomchercher) UCase(Nom)

您在Nomchercher列中的所有数据中始终findNom = ""

这将更好地工作:

Temps = InStr(1, UCase(Nomchercher), UCase(Nom), vbTextCompare)

编辑:(比较快)

 Sub FasterCompare() Dim ColMatricule As Integer Dim ColNom As Integer Dim ColChef As Integer Dim ColMatt As Integer Dim LastRow As Long ScreenUpdating = False 'find column name ColMatricule = Cells.Find("Matricule").Column ColNom = Cells.Find("Nom").Column ColChef = Cells.Find("Chef").Column ColMatt = Cells.Find("matt").Column 'find last row of data LastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row For j = 2 To LastRow 'chef If Cells(j, ColChef) <> vbNullString Then 'if chef is null then dont search nom For i = 2 To LastRow 'nom If Cells(j, ColChef) = Cells(i, ColNom) Then Cells(j, ColMatt) = Cells(i, ColMatricule) Exit For End If Next i End If Next j ScreenUpdating = True End Sub