如何排除大量GL帐户(4,000行约100个唯一帐户),同时排除特定帐户范围(约40个唯一帐户)。
我希望能够在不手动写出"<>的情况下完成此操作XXX"每个帐户40次。理想情况下,我有一个帐户表,我希望不包括在引用的总和中。
我希望在H列中汇总的值的屏幕截图,基于F列中的帐户,同时排除K列中的帐户。
答案 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”的值, 对我来说很好