Сумма до бланка - PullRequest
0 голосов
/ 05 июня 2019

У меня есть 2 столбца, в столбце B, список с пробелом между ними, числа текста перед пробелом могут варьироваться. Мне нужно вставить сумму диапазона в первой строке текста в столбце рядом с ним. И мои две попытки vba работают, но потом не работают.
Вариант 1: Works вставит "sum =" диапазон выше с текстом.
Вариант 2: вставляет в нужном месте, но вставляет только «ЛОЖЬ».

Example:
Column B:     ColumnC:
Header1       =SUM(B1:B4) eg. the sum of the range before first blank.
Sub1
Sub2
Sub3
"blank"
Header2       =SUM(B6:B8) eg. the sum of the range before first blank.
Sub1
Sub2
"blank"
Sub KSV_Option_1()
        Dim KSV_SrchRng As Range, cel As Range, KSV_Contain As String
        Set KSV_SrchRng = Range("B1:B99")
        For Each cel In KSV_SrchRng
            If InStr(cel.Value, "Forsikringspræmie") > 0 Then
                KSV_Contain = cel.Value
            ElseIf cel.Value <> "" Then
                    Dim xRg As Range
                    Dim i, j, StartRow, StartCol As Integer
                    Set xRg = Range("B1:B99")
                    StartRow = xRg.Row
                    StartCol = xRg.Column
                    For i = StartCol To xRg.Columns.Count + StartCol - 1
                        For j = xRg.Row To xRg.Rows.Count + StartRow - 1
                            If Cells(j, i) = "" Then
                                 Cells(j, i).Formula = "=SUM(" & Cells(StartRow, i).Address & ":" & Cells(j - 1, i).Address & ")"
                                StartRow = j + 1
                            End If
                        Next
                        StartRow = xRg.Row
                    Next
                End If
        Next cel
End Sub


Sub KSV_Option_2()
        Dim KSV_SrchRng As Range, cel As Range, KSV_Contain As String
        Set KSV_SrchRng = Range("B1:B99")
        For Each cel In KSV_SrchRng
            If InStr(cel.Value, "Forsikringspræmie") > 0 Then
                KSV_Contain = cel.Value
            ElseIf cel.Value <> "" Then
                    Dim xRg As Range
                    Dim i, j, StartRow, StartCol As Integer
                    Set xRg = Range("B1:B99")
                    StartRow = xRg.Row
                    StartCol = xRg.Column
                    For i = StartCol To xRg.Columns.Count + StartCol - 1
                        For j = xRg.Row To xRg.Rows.Count + StartRow - 1
                            If Cells(j, i) = "" Then
                                 cel.Offset(0, 1).Value = Cells(j, i).Formula = "=SUM(" & Cells(StartRow, i).Address & ":" & Cells(j - 1, i).Address & ")"
                                StartRow = j + 1
                            End If
                        Next
                        StartRow = xRg.Row
                    Next
                End If
        Next cel
End Sub

1 Ответ

0 голосов
/ 05 июня 2019

Я думаю, что вы пытаетесь суммировать значения в нескольких диапазонах, разделенных пустой ячейкой в ​​"Col B". Если я прав, вот простой код, который будет суммировать значения в нескольких диапазонах в "Col B", которые разделены пустой ячейкой. Формула Sum будет вставлена ​​в «Col C» справа от первой ячейки в каждом sumRng. Измените имя листа, как требуется.

For Each sumRng In Sheets("Sheet1").Columns("B").SpecialCells(xlConstants, xlNumbers).Areas
    sumA = sumRng.Address(False, False)
    sumRng.Offset(, 1).Resize(1, 1).Formula = "=SUM(" & sumA & ")"
Next sumRng

Если вы просто пытаетесь подсчитать количество ячеек в диапазоне, вы можете использовать этот простой код. Если вы подсчитываете ячейки с номерами, используйте xlNumbers, если вы подсчитываете ячейки с текстом, используйте xlConstants.

For Each cntRng In Sheets("Sheet1").Columns("B").SpecialCells(xlConstants, xlNumbers).Areas
    cntA = cntRng.Address(False, False)
    cntRng.Offset(, 1).Resize(1, 1) = cntRng.Count
Next cntRng
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...