【问题标题】:SUM a list of account balances excluding a specific range of accountsSUM 不包括特定账户范围的账户余额列表
【发布时间】:2016-06-22 14:09:04
【问题描述】:

在排除特定范围的帐户(大约 40 个唯一帐户)的同时,我如何汇总大量 GL 帐户(4,000 行,大约 100 个唯一帐户)。

我希望能够做到这一点,而无需为每个帐户手动写出 40 次“ XXX”。理想情况下,我有一个我不想包含在引用的总和中的帐户表。

我想在 H 列中求和的值的屏幕截图,基于 F 列中的帐户,同时排除 K 列中的帐户。

【问题讨论】:

    标签: excel vba filter sumifs accounting


    【解决方案1】:

    将此公式用作数组公式。输入公式后按CTRL+SHIFT+ENTER

    =SUM(IF(A2:A25=H13,IF(ISERROR(MATCH(B2:B25,F2:F5,0)),C2:C25,0),0))
    Column A - Your profit centers
    Column B - Your accounts
    Column C - Amounts to sum
    Column F - Accounts you want to exclude
    Cell H13 - Profit center that you want to sum up
    

    注意:每次编辑公式后,请按 CTRL+SHIFT+ENTER

    【讨论】:

    • 这很好用。除了我不够具体。而不是让它取所有东西的总和,我怎样才能让它对植物数量的每次变化求和(E列)。为了澄清...排除某些帐户是可行的,但不是将所有内容相加,而是我希望得到工厂# E 列中每次更改的总和。
    • 你能告诉我E列吗?并且更清楚?请首先为您的表格添加一些可视化效果。
    • 我添加了更新的屏幕截图。我会尝试更清楚地解释对不起我是新人。您提供的数组公式有效,但它汇总了工作表中的所有列。我想要的是做同样的事情,但提供每个利润中心的总和(A 列)。例如:我想要利润中心 64010 账户的总和,不包括 G 列中的指定账户。然后我只想要利润中心 64011,依此类推。
    【解决方案2】:

    您可以使用数组、A:B 中的数据和 e1:e3 中的排除项

    =SUM((ISERROR(MATCH($A$1:$A$4000,$E$1:$E$3,0)))*($B$1:$B$4000))

    这将为您提供总金额 - 排除项 这将适用于 J 列中的某些帐户

    =SUM(($A$1:$A$4000=$J4)*(ISERROR(MATCH($A$1:$A$4000,$E$1:$E$3,0)))*($B$1:$B$4000))

    【讨论】:

      【解决方案3】:

      先写在J2中:

      =iferror(vlookup(F2,K:K,1,false),1)
      

      然后将此公式复制到表格末尾。

      然后在你想求和的单元格中,输入以下

      =sumif(J:J,"1",H:H)
      

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        假设您使用 PC 版 Excel,请考虑一个可以使用 Jet/ACE SQL 引擎(Windows .dll 文件)在 Excel 中运行的聚合 SQL 查询。使用 SQL,您可以根据Account number 进行过滤并按Profit Center 进行分组。不需要数组或循环。

        根据您的需要,您可以选择工作表内的区域用作表格。请务必在 SQL 语句中相应地添加列标题和引用。主列将是主表,不包括作为子查询表。下面的设置查询名为 DATA 的工作表中的数据,并在名为 EMPTY 的空工作表中输出结果。

        SQL (作为字符串嵌入到 VBA 下面)

        SELECT d.[Profit Center], Sum(d.Amount) As [Sum Amount]
        FROM [DATA$A:D] d
        WHERE NOT EXISTS (SELECT 1 FROM [DATA$I:J] sub
                          WHERE sub.[DNI_Account number] = d.[Account number])
        GROUP BY d.[Profit Center]
        

        VBA

        Public Sub RunSQL()
            Dim conn As Object, rst As Object, fld As Object
            Dim strConnection As String, strSQL As String
            Dim i As Integer: i = 0
        
            Set conn = CreateObject("ADODB.Connection")
            Set rst = CreateObject("ADODB.Recordset")
        
            strConnection = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" _
                                  & "DBQ=C:\Path\To\Workbook.xlsm;"
            strSQL = " SELECT d.[Profit Center], Sum(d.Amount) As [Sum Amount]" _
                        & " FROM [DATA$A:D] d " _
                        & " WHERE NOT EXISTS (SELECT 1 FROM [DATA$G:H] sub" _
                        & "              WHERE sub.[Account number] = d.[Account number])" _
                        & " GROUP BY d.[Profit Center]"
        
            ' OPEN DB CONNECTION AND RECORDSET
            conn.Open strConnection
            rst.Open strSQL, conn
        
            Worksheets("RESULTS").Activate
            Worksheets("RESULTS").Range("A1").Activate
        
            ' COLUMN HEADERS
            For Each fld In rst.Fields
                ActiveCell.Offset(0, i) = fld.Name
                i = i + 1
            Next fld
        
            ' DATA ROWS
            Worksheets("RESULTS").Range("A2").CopyFromRecordset rst
        
            rst.Close
            conn.Close
        End Sub
        

        【讨论】:

          【解决方案5】:

          我认为我有一个更好的解决方案, 您可以对要排除的值列表进行 vlookup,在您想要求和的列的每一行附近,只需在 sumifs 函数中添加某种标记(如是\否),只需添加 1 个条件“从列 x:x 中只取标有“yes”的值和这个, 对我来说很好用

          【讨论】:

            猜你喜欢
            • 2016-09-23
            • 1970-01-01
            • 2011-12-09
            • 1970-01-01
            • 2014-01-01
            • 2016-10-11
            • 2021-05-19
            • 1970-01-01
            • 2021-05-24
            相关资源
            最近更新 更多