Сравнение даты с датой соединения данных в Excel с VBA - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь сравнить даты, сгенерированные на листе «Тест», с датами на другом листе, сгенерированными из соединения с базой данных на листе «360».Кажется, я не могу получить даты, сгенерированные на листе «Тест», для фактического значения «ММ / ДД / ГГГГ».Другими словами, я не могу получить фактическое значение в ячейках как «05/05/2018», оно всегда генерирует его как «5/5/2018».Сначала я попытался изменить его формат, но это только меняет формат, а не данные.

Даты в соединении с базой данных «360» отображаются как текст «MM / DD / YYYY» ичтобы сравнить даты из обеих таблиц, чтобы увидеть, когда тогда будут совпадения, мне нужно отформатировать даты в таблице «Тест», чтобы они были «MM / DD / YYYY».Кто-нибудь знает, как сгенерировать ФАКТИЧЕСКОЕ значение "ММ / ДД / ГГГГ", учитывая приведенный ниже код?

Sub SMALLDATETEST()

Workbooks("Receiving Research.xlsx").Activate
Worksheets("Test").Activate

iAddDays = 0

For iIncrementer = 1 To 75

    'Generating Dates
    Cells(iIncrementer, 1).Value = DateAdd("d", iAddDays, "05/01/2018")
    Cells(iIncrementer, 1).NumberFormat = "mm/dd/yyyy"
    iAddDays = iAddDays + 1

Next iIncrementer

'Comparing Dates
For iIncrementer = 1 To 75
    Worksheets("Test").Activate

    sCurrentTestDate = Cells(iIncrementer, 1).Value
    Worksheets("360").Activate

    'MsgBox sCurrentTestDate

    For iNewIncrementer = 3 To 20

        sCurrent360Date = Cells(iNewIncrementer, 19).Value

       'If the dates match put a "Y" in the B column
        If Trim(sCurrentTestDate) = Trim(sCurrent360Date) Then
            Worksheets("Test").Activate
            Cells(iIncrementer, 2).Value = "Y"
        End If

    Next iNewIncrementer

Next iIncrementer

End Sub

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

У вас X / Y проблема .

Истинные даты - это не более чем длинное целое число, представляющее количество дней с 31 декабря 1899 года.Неважно, сравниваете ли вы 5/5/2018, 05/05/2018 или 43 225.С точки зрения это одно и то же.

То, что не похоже на текст, выглядит как дата.Это строки и применяются основные правила сравнения строк;текст, который выглядит как дата, никогда не будет равен реальной дате.

В этом случае у вас есть два варианта:

  1. Конвертировать датыв каждом листе, чтобы текст, который выглядит как дата в идентичных форматах масок.Это не считается «лучшей практикой», поскольку даты становятся бесполезными текстовыми метками.

    'on the worksheet
    =text(a1, "mm/dd/yyyy;@")
    
    ' in vba
    Cells(iIncrementer, 1).NumberFormat = "@" '<~~ set text format first
    Cells(iIncrementer, 1).Value = Format(DateAdd("d", iAddDays, dateserial(2018, 5, 1)), "mm/dd/yyyy")
    
  2. Преобразуйте даты в каждом рабочем листе в истинные даты.Это предпочтительный метод, так как даты могут быть использованы в дальнейших расчетах.С помощью Text-to-Columns можно быстро преобразовать целые столбцы с текстом, похожими на даты, в настоящие даты.

0 голосов
/ 16 мая 2018

Я добавил дополнительный столбец и использовал следующее для преобразования текста на листе «Тест» в АКТУАЛЬНЫЙ формат «ММ / ДД / ГГГГ»:

Cells(iIncrementer, 2).Formula = "=TEXT(A" & iIncrementer & ",""mm/dd/yyyy"")"

Итак, полный рабочий код:

Sub DateTestingBD()

Workbooks("Receiving Research.xlsx").Activate
Worksheets("Test").Activate

iAddDays = 0

For iIncrementer = 1 To 75

    Cells(iIncrementer, 1).Value = DateAdd("d", iAddDays, "05/01/2018")
    Cells(iIncrementer, 2).Formula = "=TEXT(A" & iIncrementer & ",""mm/dd/yyyy"")"
    iAddDays = iAddDays + 1

Next iIncrementer

For iIncrementer = 1 To 75
Worksheets("Test").Activate

    sCurrentTestDate = Cells(iIncrementer, 2).Value
    Worksheets("360").Activate

    For iNewIncrementer = 3 To 20

        sCurrent360Date = Cells(iNewIncrementer, 19).Value

        If Trim(sCurrentTestDate) = Trim(sCurrent360Date) Then
            Worksheets("Test").Activate
            Cells(iIncrementer, 3).Value = "Y"
        End If

    Next iNewIncrementer

Next iIncrementer

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