汇总帐户余额列表,不包括特定帐户范围

时间:2016-06-22 14:09:04

标签: excel vba filter sumifs accounting

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

我希望能够在不手动写出"<>的情况下完成此操作XXX"每个帐户40次。理想情况下,我有一个帐户表,我希望不包括在引用的总和中。

我希望在H列中汇总的值的屏幕截图,基于F列中的帐户,同时排除K列中的帐户。

enter image description here

enter image description here

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

首先写入 J2

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

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

在您想要求和的单元格中,放入以下

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

希望这会对你有所帮助

答案 2 :(得分:0)

您可以使用数组,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 :(得分:0)

考虑使用Jet / ACE SQL引擎(Windows .dll文件)在Excel中运行的聚合SQL查询,假设您使用Excel for PC。使用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

答案 4 :(得分:0)

我认为我有一个更好的解决方案, 您可以对要排除的值列表执行vlookup,并且在您要求和的列的每一行附近,只需将某种标记(如yes \ no)放在sumifs函数中,只需在其中添加1条条件即可。从x:x列中仅获取标有“ yes”的值, 对我来说很好