InStr в массиве не заполняет значение, если найдено - PullRequest
0 голосов
/ 25 января 2019

Я написал приведенный ниже код для поиска значения (имя поставщика) в листе «Fusion», столбец H в листе «CX», столбец D. Я также проверяю обратное, поэтому, если то же значение (Название поставщика) в листе CX находится в листе «Fusion». Я не ищу точного соответствия, поэтому я использую Instr и сравниваю их в обоих направлениях, так как я не уверен, как пользователь ввел информацию на любом листе.

Тип данных в любой ячейке должен быть текстовым. Если совпадение найдено, то в последнем столбце листа «CX» должно просто быть указано «Поставщик найден» или «Поставщик не найден»

В настоящее время он не заполняет последний столбец какими-либо данными, но макрос не дает ошибок ни в какой момент.

Я пытался добавить msgbox, и "Here" и "Here3" запускаются, но, похоже, он не попадает в раздел кода "Here2", поэтому я думаю, что именно он вызывает проблему, но не уверен как решить.

Скриншот моих данных: CX Sheet enter image description here Fusion Sheet 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

Ожидаемый результат, который я ожидал: если в столбце H Fusion имя поставщика - «поставщик A», а значение в столбце D листа «CX» - «поставщик A LTD», то я ожидал бы, что заполните столбец G в листе CX "Найден поставщик", так как он найден в строке.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Я не знаю, как правильно вставить примеры моих данных, иначе у меня будет

Ответы [ 2 ]

0 голосов
/ 25 января 2019
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
0 голосов
/ 25 января 2019

Необходимо проверить чувствительность к регистру:

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...