Динамический первый и последний ряд диапазона - PullRequest
0 голосов
/ 21 мая 2019

Я удивлен, что нет ответа на это. Я прочитал Настройка динамических диапазонов в VBA и Выбор динамического диапазона и Автозаполнение динамического диапазона последней строки и последнего столбца и MSDN

У меня есть несколько различных диапазонов на листе с различными размерами. Я пытаюсь подвести итоги column L. Я могу сделать это, используя жестко запрограммированную сумму (через переменную subtotal), но вместо этого я хочу вставить формулу в ячейку. Это требует знания начальной и конечной строк для каждого диапазона. Мой код почти работает. Сбой, когда диапазон состоит только из одной строки. Несмотря на это, я чувствую, что должен быть разумный способ сделать это.

Как определить начальную и конечную строку диапазона на листе, заполненном несколькими диапазонами?

For i = 2 To j

    If .Cells(i + 1, "L") = "" And .Cells(i + 2, "L") = "" Then
        b = .Cells(i - 1, "J").End(xlUp).Row
    End If

    subtotal = subtotal + .Cells(i, "L").Value2
    If .Cells(i, 1) = "" And .Cells(i - 1, "B") <> "" Then
        If .Cells(i - 1, "K") = 0 Then
            .Cells(i, "K").Value2 = "Check Payment"
            'Set sumRng = .Range(.Cells(b, "L"), .Cells(i - 1, "L"))
            .Cells(i, "L").Formula = "=sum(L" & b & ":L" & i - 1 & ")"
            .Cells(i - 1, "L").Borders(xlEdgeBottom).LineStyle = xlContinuous
            total = total + subtotal
            subtotal = 0
        ElseIf .Cells(i - 1, "K") = "Checking" Then
            .Cells(i, "K").Value2 = "EFT Payment"
            'Set sumRng = .Range(.Cells(b, "L"), .Cells(i - 1, "L"))
            .Cells(i, "L").Formula = "=sum(L" & b & ":L" & i - 1 & ")"
            .Cells(i - 1, "L").Borders(xlEdgeBottom).LineStyle = xlContinuous
            total = total + subtotal
            subtotal = 0
        End If
    End If
Next

enter image description here

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Используется Match для пропуска фрагментов, и поэтому число или циклы меньше

With ActiveSheet
    Dim b As Long
    b = 2

    Do Until b = .Rows.Count

        Dim x As Variant
        x = .Evaluate("Match(True, Index(" & .Range(.Cells(b, "l"), .Cells(.Rows.Count, "l")).Address & " <> """",),0)")
        If Not IsError(x) Then
            b = b + x - 1
        Else
            Exit Sub
        End If

        x = .Evaluate("Match(True, Index(" & .Range(.Cells(b, "l"), .Cells(.Rows.Count, "l")).Address & " = """",),0)")
        Dim i As Long
        i = b + x - 1

        .Cells(i, "l").Formula = "=sum(L" & b & ":L" & i - 1 & ")"

        b = i + 2
     Loop
End With
1 голос
/ 21 мая 2019

Вы можете проходить по столбцу следующим образом:

For i = 2 To mySheet.Range("B" & Rows.Count).End(xlUp).Row + 1
    If Range("B" & i).Value <> vbNullString Then
        If Range("B" & i - 1).Value = vbNullString Then
            j = i
        End If
    Else
        If Range("B" & i - 1).Value <> vbNullString And Range("B" & i - 1).Formula <> "=SUM(B" & j & ":B" & i - 2 & ")" Then
            Range("B" & i).Formula = "=SUM(B" & j & ":B" & i - 1 & ")"
        End If
    End If
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...