Как мне написать скрипт VBA, чтобы он сравнивал данные? - PullRequest
0 голосов
/ 28 мая 2019

Нам нужен скрипт для сравнения дат в столбце D с датами в столбце E.

Если дата в столбце D находится за два дня до даты в столбце E, тогда нам нужно в столбце F указать, что в соответствующей строке к D. У нас есть диапазон от 2 дней до и 2 дней после (промежуточные дни). Мы должны иметь возможность легко воспроизвести это и иметь возможность работать при импорте в доступ. у нас есть около 3300 уникальных дней для проверки.

Я пытался использовать datevalue или формулу, но мы должны иметь возможность воспроизвести это в будущем, а формула не позволяет нам легко это сделать.

1 Ответ

0 голосов
/ 28 мая 2019

Я не буду предоставлять полную реализацию, но я покажу вам, как вы можете это сделать (либо формула Excel , либо VBA-код ).Оба способа автоматически рассчитают нужные вам значения, поэтому вы можете легко импортировать их в Microsoft Access - при импорте будут вычислены значения из выбранных вами ячеек.


первый способ , который также является самым простым, состоит в том, чтобы сделать это с простой формулой Excel, рассмотрите эту картину, показывающую, как формула будет вычислять значения в столбцахF и G:

DateDiff

(примечание: отображается немецкий формат даты, но вы можете легко изменить его в Excel).

В столбце G вычисляется разница D2 - D1 и отображается в днях.Затем в столбце F имеется простое условие if, чтобы определить, является ли дата D1 меньше, больше или равна D2. Результат рассчитывается автоматически.

Формула в строка 2 :

JustFormula

Подсказка: Вы можете перетащить формулу в строк 3 - n ниже, чтобы вы могли создать множество строк, предварительно заполненных этой формулой.


A вторым способом является то, что вы можете написать функцию VBA для (простой) формулы расчета в столбце F:

Function CalcResult(D1 As Variant, D2 As Variant) As Variant

    CalcResult = ""
    Dim result As String
    Dim diff As Single
    diff = D2 - D1
    If (diff > 0) Then
        result = "D1 < D2"
    ElseIf (diff = 0) Then
        result = "D1 = D2"
    ElseIf (diff < 0) Then
        result = "D1 > D2"
    End If
    CalcResult = result

End Function

Это необходимо ввести в редакторе VBA, , который можно отобразить, если вы нажмете Alt + F11 .После этого нажмите Alt + F11 снова, чтобы закрыть VBA и вернуться на лист Excel.

Затем поместите формулу =CalcResult(E2; D2) в * 1074.* ячейка F2 , как показано ниже:

FormulaWithVBA

Как и в предыдущем примере, вы можете перетаскивать формулу в строки 3 - n ниже, так что вы можете создать множество строк, предварительно заполненных этой формулой.

Преимущество второго подхода заключается в том, что вы можете уточнить функцию CalcResult позже без необходимости менять ячейкиснова (как это имеет место в первом примере).

Примечание: Вышеприведенная функция должна быть в отдельном модуле, и вам необходимо сохранить рабочую книгу как «Рабочая книга с поддержкой макросов».позже - в противном случае вы потеряете код VBA.


A Третий способ заключается в использовании макросреда Excel и записичто бы вы ни собирались делать.Он создаст публичный модуль с кодом VBA. Если диктофон попросит вас, выберите сохранение кода в рабочей книге.

Позже вы повторно посетите сгенерированный код VBA и уточните его - например, поместите вокруг него цикл for, чтобы автоматизировать записи, которые вы записали один раз.Этот подход хорош для создания кнопки «Рассчитать» и добавления некоторой логики.

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