У меня проблема с кодом VBA, который я разработал - PullRequest
0 голосов
/ 25 февраля 2020

Я разработал приведенный ниже код vba для расчета совокупного производства до одной даты в столбце «K» путем добавления сумм в столбце «I», соответствующих датам, меньшим, чем в столбце «K»

    Option Explicit
    Sub Gp()
    Dim date2 As Double            'Same p/z production Dates'
    Dim Gp As Double               'Cumulative production volumes"
    Dim fraction As Double
    Dim Daysmonth As Double
    Dim Days As Double
    Dim i As Integer, j As Integer

        Gp = 0
        j = 3
        For i = 4 To 43
              date2 = Cells(i, "K")
              Do While (Cells(j, "A") < date2)
                  Gp = Gp + Cells(j, "I")
                  j = j + 1
               Loop
               Daysmonth = Cells(j, "A") - Cells(j - 1, "A")
               Days = date2 - Cells(j - 1, "A")
               fraction = Cells(j, "I") * Days / Daysmonth
               Gp = Gp + fraction
               Cells(i, "M") = Gp
               Gp = (Gp + Cells(j, "I")) - fraction
               j = j + 1
        Next i
End Sub

Этот код занимает первую ячейку столбца «K» и просматривает все даты меньше даты в столбце «A». Затем он добавляет все суммы в столбце «I» для соответствующих дат. Затем, если дата в столбце «A» совпадает с месяцем и датой даты в столбце «K», она рассчитает долю суммы, соответствующую этим дням. Все в порядке до 14.08.88 при расчете доли, которую он дает -17 вместо 14 дней для 8.08.14 - 31.08.8. Это дает мне 6304593, и это должно дать мне 6350518.484.

Это картина моих ответов в столбце "M" и правильных ответов в столбце "N". Они очень похожи, но не одинаковы для некоторых дат

Расчетные кумулятивные и правильные ответы рядом с ним

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Выход 8/14/80 - 8/31/80 должен быть только -17 вместо 14 дней. Просто чтобы проверить, я попробовал ваш код и заменил значение -17 на 14, затем получаю вывод: 7255151.33 вместо 6350518.484.

Я думаю, что дробь не должна рассчитываться в этом случае (14.08.8 - 31.08.88), так как основным условием является дата в столбце K (14.08.88) должна быть больше чем Date в столбце A (31.08.88), который в этом случае дает сбой.

И если это необходимо, то вы можете проверить, является ли вывод date2 - Cells(j - 1, "A") отрицательным, затем заменить его на Cells(j - 1, "A")-date2, чтобы сделать результат положительный.

0 голосов
/ 25 февраля 2020

"при расчете дроби дает -17 вместо 14 дней для 8/14/80 - 8/31/80"

Не уверен, где вы получаете 14 дней , Поскольку 31 августа 1980 года будет в будущем, это будет 17 дней после 14 августа 1980 года. Исходя из вашей формулы 8/14/80 - 31.08.88, она достигает -17, что является правильным.

Если вы можете включать даты, превышающие 'date2', вы можете использовать встроенную в функции «Abs ()», чтобы результат всегда был положительным, и это должно исправить расчет.

Days = Abs(date2 - Cells(j - 1, "A"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...