Использование VBA для вычисления значений ячеек в строках на основе критериев - PullRequest
0 голосов
/ 07 февраля 2020

У меня проблема, я надеюсь, что смогу помочь. В сводном отчете мне нужно использовать критерии даты: сегодняшняя дата по сравнению с месяцами в B1: M1 (все ячейки отформатированы с использованием формата даты, определенного пользователем, чтобы отображать только название месяца), чтобы суммировать строки данных, только если указан номер счета в столбце А. (см. пример ниже)

IE, если сегодняшняя дата 7 февраля, код VBA должен l oop пройти по всем строкам и суммировать только числа за январь и февраль, где номер счета равен настоящее (это должно быть в VBA)

Example

Вот что я имею до сих пор:

Sub Test()

Dim today, lastdayinmonth As Date
Dim i, ii As Integer
Dim months As Range

today = DateSerial(Year(Date), Month(Date), Day(Date))
lastdayinmonth = DateSerial(Year(Date), Month(Date) + 1, 0)
months = Sheet2.Range("B2:M2")

    If idag <= lastdayinmonth Then
        For i = 3 To 20
            If Not IsEmpty(Sheet2.Range("B" & i)) Then
            
            End If
        Next ii
            
    
    End If


End Sub

1 Ответ

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

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

Sub TestSumMonth()
 Dim arrM As Variant, i As Long, j As Long
 Dim nSum As Long, lastRow As Long, sh As Worksheet
  Set sh = sheet2

 lastRow = sh.Range("A" & sh.Rows.count).End(xlUp).Row
 arrM = sh.Range("A1:M" & lastRow).Value
 sh.Range("O2:O" & lastRow).Interior.ColorIndex = xlNone ' clear the existing interior color

 For i = 1 To UBound(arrM, 1)
    If arrM(i, 1) <> Empty Then
        nSum = 0
        For j = 2 To UBound(arrM, 2)
            If Month(Date) >= Month(arrM(1, j)) Then
                nSum = nSum + arrM(i, j)
                If Month(Date) = Month(arrM(1, j)) Then
                    With sh.Range("O" & i)
                        .Value = nSum
                        .Interior.Color = vbYellow ' interior colored in yellow
                    End With
                    Exit For
                End If
            End If
        Next j
     End If
 Next i
End Sub

Код сначала очищается " O: O "диапазон внутреннего цвета, затем возвращает сумму в соответствующей строке этого столбца и окрашивает интерьер ячейки в желтый ... Теперь он суммирует все значения прошедшего месяца плюс активный месяц.

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