如果找到,则数组中的InStr不会填充值

时间:2019-01-25 18:01:49

标签: excel vba

我已经编写了以下代码,以在工作表“ Fusion”中的值“ Fusion”中搜索值(“供应商名称”)。在工作表“ CX”的列D中,H列也进行了检查。工作表CX中的(供应商名称)在工作表“融合”中。我不是要查找完全匹配的内容,因此要使用Instr并以两种方式进行比较,因为我不确定用户如何在任一工作表中输入信息。

每个单元格中的数据类型应为文本。 如果找到匹配项,则应在“ CX”工作表的最后一列中填充“找到供应商”或“找不到供应商”

当前它没有用任何数据填充最后一列,但是宏在任何时候都没有错误。

我尝试添加msgboxes并触发了“ Here”和“ Here3”,但似乎未触及“ Here2”的代码部分,因此我认为正是这引起了问题,但不确定解决方法。

我的数据的屏幕截图是:CX工作表 enter image description here 融合板 enter image description here

任何帮助将不胜感激。

Option Explicit


Sub CompareCXFusion()

Dim CX As Worksheet
Dim Fusion As Worksheet

Dim strTemp as string
Dim strCheck as string

Dim i As Long, J As Long

Dim CXArr As Variant
Dim FusionArr As Variant

Dim match As Boolean

Dim CXRng As Range
Dim FusionRng As Range

Set CX = ActiveWorkbook.Sheets("CX")
Set Fusion = ActiveWorkbook.Sheets("Fusion")

Set CXRng = CX.Range("A2", CX.Cells(Rows.Count, "A").End(xlUp).Offset(0, 6))
Set FusionRng = Fusion.Range("A2", Fusion.Cells(Rows.Count, "A").End(xlUp).Offset(0, 9))

CXArr = CXRng.Value2
FusionArr = FusionRng.Value2

strTemp = lcase(trim(FusionArr(J, 7)))  
strCheck = lcase(trim(CXArr(i, 3))) 


For i = 1 To UBound(CXArr)
    Match = False
        For J = 1 To UBound(FusionArr)
        MsgBox "Here"
            If (Instr(strTemp, strCheck) > 0) OR (InStr(strCheck, strTemp) > 0) Then
                MsgBox"Here2"
                CXArr(i, 6) = "Supplier Found"
            Else
            Msgbox"Here3"
                CXArr(i, 6) = "Supplier not found"

        End If
    Next J
Next i
End Sub

我期望的预期输出是:如果在Fusion的H列中,供应商名称是“ Supplier A”,而在“ CX”表的D列中的值是“ Supplier A LTD”,那么我期望它会由于在字符串中找到了“发现供应商”,因此在工作表CX中的G列中填充了它。

如果您需要更多信息,请告诉我。

我不知道如何正确插入我的数据示例

2 个答案:

答案 0 :(得分:1)

您需要确保检查是否区分大小写:

    Dim strTemp as string
    Dim strCheck as string 


    'Inside for I loop
        'Inside for j Loop
    strTemp = lcase(trim(FusionArr(J, 7)))  
    strCheck = lcase(trim(CXArr(i, 3)))  

    If (Instr(strTemp, strCheck) > 0) OR (InStr(strCheck, strTemp) > 0) Then 
        '...  

    End If
        'end for j
    'end for i

答案 1 :(得分:1)

Option Explicit
Sub CompareCXFusion()
    Dim CX As Worksheet
    Dim Fusion As Worksheet
    Dim i As Long, J As Long, lastRowCX As Long, lastRowFU As Long
    Dim CXText As String, FusionText As String
    Dim match As Boolean
    Dim CXRng As Range, FusionRng As Range

    Set CX = ActiveWorkbook.Sheets("CX")
    Set Fusion = ActiveWorkbook.Sheets("Fusion")

    lastRowCX = CX.Range("D1").SpecialCells(xlCellTypeLastCell).Row - 1
    lastRowFU = Fusion.Range("H1").SpecialCells(xlCellTypeLastCell).Row - 1

    Set CXRng = CX.Range("D1:D" & lastRowCX)
    Set FusionRng = Fusion.Range("H1:H" & lastRowFU)

    For i = 1 To lastRowCX
        match = False
            For J = 1 To lastRowFU
            'Debug.Print "Here"
                FusionText = FusionRng.Range("A1").Offset(J, 0).Value
                CXText = CXRng.Range("A1").Offset(i, 0).Value
                If FusionText <> "" And CXText <> "" Then
                If InStr(FusionText, CXText) Or InStr(CXText, FusionText) Then
                    'Debug.Print "Here2"
                    match = True
                End If
                End If
            Next J


        'Result goes to column G of CX range:
        If match Then
            CXRng.Range("A1").Offset(i, 3).Value = "Supplier found" ' "Supplier found - " & i & " - " & CXRng.Range("A1").Offset(i, 0).Address & " - " & CXRng.Range("A1").Offset(i, 3).Address
        Else
            CXRng.Range("A1").Offset(i, 3).Value = "Supplier NOT found" '"Supplier NOT found - " & i & " - " & CXRng.Range("A1").Offset(i, 0).Address & " - " & CXRng.Range("A1").Offset(i, 3).Address
        End If

    Next i
End Sub