如何在空白行之间插入动态公式?

Posted

技术标签:

【中文标题】如何在空白行之间插入动态公式?【英文标题】:How to insert dynamic formulas in between blank rows? 【发布时间】:2019-07-19 00:42:54 【问题描述】:

*** 编辑 7/19 @AcsErno求和的公式工作正常,但由于有8行,它在每个空白行中输入总和。有没有办法在代码中输入多个公式?

我尝试复制公式 (Cells(LastRow + 2, j).FormulaLocal...) 并将 +1 更改为 +2(依此类推),但只有第一个空白行对所需范围求和,其他的要么总和/等于它上面的行。

Updated Excel

'sum inbetween blanks
    finalRow = Cells(Worksheets("page1").Rows.Count, 1).End(xlUp).Row
    For Each j In Array(12, 13, 14) 'original: For j = 1 To finalCol

        For i = finalRow + 1 To 1 Step -1
            If IsEmpty(Cells(i, j)) Then
                If IsEmpty(Cells(i - 2, j)) Then
                    firstrow = i - 1
                    LastRow = firstrow
                Else
                    LastRow = i - 1
                    firstrow = Cells(i - 1, j).End(xlUp).Row
                End If
                Cells(LastRow + 1, j).FormulaLocal = _
                    "= sum(" & Range(Cells(firstrow, j), Cells(LastRow, j)).Address(False, False) & ")"
                Cells(LastRow + 2, j).FormulaLocal = _
                    "= sum(" & Range(Cells(firstrow, j), Cells(LastRow, j)).Address(False, False) & ")"
            End If
        Next i
    Next j

    Application.ScreenUpdating = True

如果有帮助,以下是我将使用的一些公式:

=SUMIF(P138:P158,"<>*Hold*",L138:L158)
=SUM(SUMIF(H5:H21,"China",L5:L21)) 
=SUM(SUMIF(H5:H21,"Other",L5:L21)) 
=SUM(SUMIF(O12:O28,"*H1*",L12:L28))
=SUM(SUMIF(O12:O28,"H2","H2-PRESSED",L12:L28))

Link to Sum Code Link to Enter Blank Rows


我的数据由 8 个空白行分隔,每个不同的周数有 8 个空白行。我需要在每周/空白之间插入计算特定事物的公式。

行数是动态的,因此公式也必须是动态的。我用来求和的唯一代码只有在中间有 1 个空白行(不是 8 个)时才能正常工作,而且我不确定如何添加更多行/公式。

Here is what the excel looks like (shortened version)

Here is what I'm trying to make it look like

'insert blank columns based on change in wk
    Dim X As Long, LastRow As Long
    Const DataCol As String = "A"
    Const StartRow = 2
    LastRow = Cells(Rows.Count, DataCol).End(xlUp).Row
    For X = LastRow To StartRow + 1 Step -1
        If Cells(X, DataCol).Value <> Cells(X - 1, DataCol) Then Rows(X).Resize(8).Insert
    Next

    finalRow = Cells(Worksheets("page1").Rows.Count, 1).End(xlUp).Row
    finalCol = Cells(1, Worksheets("page1").Columns.Count).End(xlToLeft).Column
    For j = 12 To 14 'original: For j = 1 To finalCol
        For i = finalRow + 1 To 1 Step -1
            If IsEmpty(Cells(i, j)) Then
                If IsEmpty(Cells(i - 2, j)) Then
                    firstrow = i - 1
                    LastRow = firstrow
                Else
                    LastRow = i - 1
                    firstrow = Cells(i - 1, j).End(xlUp).Row
                End If
                Cells(i, j) = Application.WorksheetFunction.Sum(Range(Cells(firstrow, j), Cells(LastRow, j)))
            End If
        Next i
    Next j

【问题讨论】:

【参考方案1】:

尚不清楚为什么要在每个循环中更改 firstrow。另外,为什么要覆盖列中的原始值。如果您有一个静态表并想在下面汇总一列,只需识别第一行和最后一行(如您正确所做的那样),然后

Cells(LastRow + 1, j) = Application.WorksheetFunction.Sum(Range(Cells(firstrow, j), Cells(LastRow, j)))

或者你可以插入一个公式

Cells(LastRow + 1, j).FormulaLocal = _
          "=sum(" & Range(Cells(firstrow, j), Cells(LastRow, j)).Address(False, False) & ")" 

您也可以考虑 SUMIF 仅添加 H1 和 H2 类别。

也不清楚为什么要汇总字符串列。这没有道理。您确切地知道数字列的位置,因此您可以指定列号。我建议选项 1:

For j = 6 To 8

或选项 2:

For Each j in Array (6,7,8)  ' it is more flexible

【讨论】:

谢谢!我是 VBA 新手,所以我使用的代码来自我找到的链接。插入公式确实很有帮助,我正在尝试对其进行调整,以便可以插入更多公式。我唯一的问题是我认为我不能将任何行留空。 @AokazuSei 欢迎您。请点击旁边的 0 接受我的回答,以提高我的声誉。谢谢。

以上是关于如何在空白行之间插入动态公式?的主要内容,如果未能解决你的问题,请参考以下文章

请教Excel如何去除下拉菜单空白区域的问题,空白区域有公式。

EXCEL空白行如何不覆盖的问题

为啥我的EXCEL中求和公式计算出来的空白?

Excel 如何批量插入多行空白行

vim中如何插入空白行而不必要进去insert模式

解决百度ueditor插入动态地图空白 支持iframe方法