Функция сопоставления, используемая для сопоставления дат, работает неправильно - PullRequest
0 голосов
/ 01 июля 2019

Я создаю массив "Checkarray ()" для сбора данных столбца A на рабочем листе "Gun Log". После этого я создаю функцию цикла «For» для данных столбца A на рабочем листе «Инвентаризация оружия». Сравнивая данные в двух листах, я пытался использовать функцию «Совпадение», чтобы найти место сопоставления данных, и переносить соответствующую дату с одного листа на другой.

Программа запускается после некоторой настройки, но не дает правильной даты. Независимо от того, как мне отрегулировать условия, перенос даты всегда «1.10.08», откуда я не знаю, откуда он. Пожалуйста, помогите мне проверить мой код, чтобы увидеть, если я что-то неправильно понял, или дайте мне знать, как это происходит. Меня также смущает, что если в одном листе сопоставлено несколько разных результатов, результатом будет функция соответствия, указанная в конце. Причина, по которой я спрашиваю об этом, заключается в том, что в рабочем листе «Журнал орудий» для каждого пистолета есть несколько совпадающих результатов, и я подозреваю, что именно здесь возникла ошибка.

Ваша помощь высоко ценится.

Я создаю массив "Checkarray ()" для сбора данных столбца A на рабочем листе "Gun Log". После этого я создаю функцию цикла «For» для данных столбца A на рабочем листе «Инвентаризация оружия». Сравнивая данные в двух листах, я пытался использовать функцию Match, чтобы определить местонахождение сопоставляемых данных, и переносить соответствующую дату с одного листа на другой.

Private Sub submitBt_Click()

Dim i As Integer
Dim c As Long
Dim g As Long

Dim CheckArray() As String


With ThisWorkbook.Sheets("Gun Log")
    For c = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
        ReDim Preserve CheckArray(c - 1)
        CheckArray(c - 1) = .Cells(c, "A").Value
    Next c

End With

    For g = 1 To UBound(CheckArray) Step 1
        If UCase(CheckArray(g)) = UCase(.Cells(i, "A")) Then
            .Cells(i, "E") = Worksheets("Gun Log").Cells(Application.Match(CheckArray(g), .Columns(1)) + 1, "B").Value
            Debug.Print Application.Match(CheckArray(g), .Columns(1))
            Debug.Print Worksheets("Gun Log").Cells(Application.Match(CheckArray(g), .Columns(1)) + 1, "B").Value
        End If
    Next g

    Next i 

End With


End Sub

1 Ответ

0 голосов
/ 01 июля 2019

Попробуйте использовать все аргументы Match(), чтобы убедиться, что у вас есть точное совпадение.

Возможно, вы совпадаете частично, поэтому у вас есть только один выход,Вы использовали:

Worksheets("Gun Log").Cells(Application.Match(CheckArray(g), .Columns(1)) + 1, "B").Value
'AND
Application.Match(CheckArray(g), .Columns(1))

Третий аргумент для соответствия - это точное совпадение, поэтому попробуйте:

Worksheets("Gun Log").Cells(Application.Match(CheckArray(g), .Columns(1), 0) + 1, "B").Value
'AND
Application.Match(CheckArray(g), .Columns(1), 0)

То, что я добавил "0" (третий аргумент), означает, что вынужно точное совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...