【问题标题】:Dynamic excel sum function动态excel求和函数
【发布时间】:2020-08-23 22:18:26
【问题描述】:

我正在尝试对动态范围进行求和公式。很像在数据透视表中。

看一下图片,我希望 L15 是从 L16 到空白行的范围之和。由于范围是动态的,我不确定如何在我的代码上编写它。到目前为止,我所拥有的是:

If out.Range("A15").Cells(i, 1) = "Aktier" Then
        out.Range("L15").Cells(i, 1) = Application.WorksheetFunction.Sum(Range("L15").Cells(i + 1, 1), Range("L15").Cells(i + 1, 1).End(xlDown))
End If

所以我的问题基本上是如何编写 Sum(A1:End(xlDown)) 之类的东西? :)

希望你们能帮帮我! :D

提前致谢!

【问题讨论】:

  • 试试:out.Range("L15").Cells(i, 1).Value = Application.Sum(out.Range(out.Cells(i + 1, 12), out.Cells(i + 1, 12).End(xlDown)))
  • 您好感谢您的快速回复,但这只会在我运行我的潜艇后给我“FALSE”的值。
  • 你好,伙计。这只是给了我一个 0 值:(
  • 请显示更多您的代码。你是在循环单元格还是只检查A15 的“Aktier”。了解i 变量包含什么以及它对您有什么作用会很有帮助。
  • 基本上只有这个。在 Aktier 之后,我有一行说同样的话,但使用“Obligationer IG”和“UCITS Alternative”。我只是我的行号,所以我循环不同的行号。

标签: excel vba dynamic sum


【解决方案1】:

首先,我建议您尽可能地获得一个更像数据库的结构,因此我将有一列重复该概念,然后您就可以轻松地使用 Excel SUMIF 函数。

这可能不是您的情况(这似乎是会计程序的输出)。利用使用 VBA 宏,您可以使用循环来生成我之前提到的列(您也可以使用该概念进行求和,但我相信生成更好的数据格式会更清晰)。请看下图:

Sub Add_Concepts()

i = 1
Concept = Cells(i, 2)
i = 2
Do While (Cells(i, 2) <> "")
 Cells(i, 1) = Concept
 If Cells(i + 1, 2) = "" Then 'Change in concept
  Concept = Cells(i + 2, 2) 'New concept
  i = i + 2 'add 2 to skip the New concept line and the white space
 End If
  i = i + 1
Loop

End Sub

现在您可以使用常规的 Excel 函数了。

希望这会有所帮助!

【讨论】:

  • 我不太擅长 VBA,但不太确定我是否遵循了我害怕的代码,但是非常感谢为我的任务做出贡献:D
【解决方案2】:

跳过步骤

片段:

If out.Range("A15").Cells(i, 1) = "Aktier" Then
    With out.Range("L15")
        .Cells(i, 1) = Application.WorksheetFunction _
          .Sum(.Parent.Range(.Offset(1), .Offset(1).End(xlDown)))
    End With
End If

工作示例:

Option Explicit

Sub SumToBlank()

    Dim out As Worksheet: Set out = ThisWorkbook.Worksheets("Sheet1")
    Dim i As Long: i = 1

    If out.Range("A15").Cells(i, 1) = "Aktier" Then
        With out.Range("L15")
            .Cells(i, 1) = Application.WorksheetFunction _
              .Sum(.Parent.Range(.Offset(1), .Offset.End(xlDown)))
        End With
    End If

End Sub

【讨论】:

  • 谢谢。似乎仍然无法正常工作。 sum(A1:End(xlDown)) 不就是一个简单的函数吗?就像我计算行数时一样,我可以使用 Range("F5", PF3.Range("F5").End(xlDown)).Rows.Count。总和没有这样的东西吗?
  • 就像,我不知道为什么这不起作用:out.Range("L15").Cells(i, 1) = Application.WorksheetFunction.Sum(out.Range("L15" ).Cells(i + 1, 1), Range("L15").Cells(i + 1, 1).End(xlDown)))
  • @Lelung:我已经更新了我的答案。以前是错的。
  • 这可能是一个简短的答案:out.Range("L15").Cells(i, 1) = Application.WorksheetFunction.Sum(Range(Range("L15").Cells(i + 1, 1), Range("L15").Cells(i + 1, 1).End(xlDown)))。但是范围没有被限定,它们指的是ActiveSheet而不是Sheets("out")。如果它们都相同,它将起作用。但这不是你编写代码的方式。
  • 您在原始帖子中发布的长代码现在似乎可以使用。非常感谢:D 我确实有一个问题,但是我坐在一个有 8 个不同潜艇的模块中,不知道在哪里放置我的 Option Explicit 语句。当我尝试将它放在我的子上时,它似乎将它添加为上一个子中的最后一行? :( 不确定我是否正确地表达了自己:)
猜你喜欢
  • 2012-12-20
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2011-12-06
相关资源
最近更新 更多