Создайте «дублирующую» строку, если между датой задействовано более одного месяца - PullRequest
0 голосов
/ 04 января 2019

Меня попросили «автоматизировать» некоторые задачи Excel, касающиеся медицинских лицензий, и сейчас мне в основном нужно выяснить, длится ли лицензия больше месяца, если это так, продублировать все данные строки, кроме даты, которая требуется адаптироваться к «следующему месяцу», а также генерировать идентификатор периода, который включает год + месяц (например, 201801 для лицензии, начатой ​​в январе / 2018).

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

period id   member  start date  end date    jan feb
201801  john doe    09/01/2018  07/02/2018  23  7

=SUMAPRODUCTO(--(TEXTO(FILA(INDIRECTO($J9 & ":" & SI($K9="";HOY();$K9)));"MMM")=N$8))

Проблема с таблицей выше состоит в том, что файл становится огромным с формулой, поэтому вместо этого я пока думаю, просто дублирование строки:

period id   member  start date  end date    
201801  john doe    09/01/2018  31/01/2018      
201802  john doe    01/02/2018  07/02/2018  

Дело в том, что я не могу понять, как сравнивать месяцы и печатать их так, как я должен.

Sub CopyData()
Set hojatst = Sheets(Hoja5)
Dim d
Dim j
d = 1
j = 8
Do Until IsEmpty(hojatst.Range("D" & j))
    If hojatst.Range("D" & j) < hojatst.Range("E" & j) Then
    d = d + 1

    End If
    j = j + 1
End Sub

1 Ответ

0 голосов
/ 04 января 2019

Это «набросок» кода, который вам нужно будет написать. Stackoverflow - это не служба запроса кода, поэтому вам нужно приложить все усилия, чтобы написать ее самостоятельно. Сообщество с радостью поможет вам устранить неполадки, пока вы учитесь, но вы должны много использовать Google. Я написал эскиз, чтобы вы начали, потому что я помню, как тяжело было научиться основам кодирования. Не стесняйтесь задавать уточняющие вопросы.

Прежде всего я не могу заставить Excel распознавать формат DD / MM / YYYY. Это может быть потому, что у меня копия из США, а это не стандартный формат времени. Похоже, вы используете другую версию Excel из-за формул, которые вы перечислили. Однако при повторной проверке убедитесь, что ваш код правильно читает формат DD / MM / YYYY.

Создайте переменную cl, которая является вашей текущей строкой. Создайте md, который является разницей в месяце.

Если Month (Start Date) меньше Month(End Date), то md = Difference of Months, вставить столько строк ниже текущей строки. Range("E" & cl+md).Value = Range("E" & cl), которая вставляет дату окончания в последний слот.

Затем для cl < cl+md заполните периоды, добавив +1 к значению, если последнее число не равно 4, и +97, если оно есть.

Затем заполните пустые ячейки для дат с Start of Month и End of Month датами.

Наконец, установите cl = cl + md + 1 и loop, чтобы перейти к следующей «исходной» строке.

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