我尝试使用Google表格(或Microsoft Excel)创建一个解决以下语句问题的公式:
A B C
1 Amount Paid By Beneficiaries
2 $20,00 James Elizabeth, James, Michael
3 $4,50 Elizabeth Elizabeth, Michael
4 $6,90 James Michael
我想计算每个人彼此之间的欠款(我试图获得的结果):
Elizabeth > Elizabeth €2,25
Elizabeth > James €6,67
Elizabeth > Michael €0,00
James > Elizabeth €0,00
James > James €6,67
James > Michael €0,00
Michael > Elizabeth €2,25
Michael > James €13,57
Michael > Michael €0,00
目前,我已经创建了两个新列D
和E
,分别称为Number
和Amount/Number
。
对于第一个Number
,我使用以下公式计算列C
名称(放在单元格D2
中):
=COUNTIF(C2;"*"&"Elizabeth"&"*") + COUNTIF(C2;"*"&"James"&"*") + COUNTIF(C2;"*"&"Michael"&"*")
对于第二个Amount/Number
,我使用以下公式(放在单元格A
中)将列D
与E2
分开:
=A2/D2
所以我当前的语句文件如下:
A B C D E
1 Amount Paid By Beneficiaries Number Amount/Number
2 $20,00 James Elizabeth, James, Michael 3 $6,67
3 $4,50 Elizabeth Elizabeth, Michael 2 $2,25
4 $6,90 James Michael 1 $6,90
因此,为了计算Elizabeth > Elizabeth
,我使用了以下公式:
=SUMIFS(E:E; B:B; "Elizabeth"; C:C; "*"&"Elizabeth"&"*")
因此,为了计算Elizabeth > James
,我使用了以下公式:
=SUMIFS(E:E; B:B; "James"; C:C; "*"&"Elizabeth"&"*")
等等。
我的问题是:是否可以使用D
计算语句而不创建列Number
(E
)和Amount/Number
(=SUMPRODUCT()
)还是一些类似的公式?可能有一种更简单的方法来解决我的问题,您的帮助将不胜感激。谢谢!
答案 0 :(得分:1)
请尝试公式:
=QUERY(
{"Paid By"\"Beneficiary"\ "Amount";
TRANSPOSE(SPLIT(JOIN(";";
ARRAY_CONSTRAIN(ArrayFormula(
rept(B2:B&";";LEN(C2:C)-LEN(SUBSTITUTE(C2:C;",";""))+1));
COUNTA(A2:A);1));";")) \
TRANSPOSE(SPLIT(TEXTJOIN(", ";1;C2:C);", ")) \
TRANSPOSE(SPLIT(JOIN(";";
ARRAY_CONSTRAIN(ArrayFormula(
rept(A2:A /
(LEN(C2:C)-LEN(SUBSTITUTE(C2:C;",";""))+1)&";";
LEN(C2:C)-LEN(SUBSTITUTE(C2:C;",";""))+1));
COUNTA(A2:A);1));";"))
};
"select Col1, Col2, sum(Col3) group by Col1, Col2")
结果是一个查询报告:
Paid By Beneficiary sum Amount
Elizabeth Elizabeth 2,25
Elizabeth Michael 2,25
James Elizabeth 6,67
James James 6,67
James Michael 13,57
答案 1 :(得分:0)
我认为这取决于你想如何呈现谁欠谁的最终总数。
这会将金额(A列)除以逗号分隔的受益人数(C列)。
=A2/(LEN(TRIM(C2))-LEN(SUBSTITUTE(TRIM(C2),",",""))+1)
答案 2 :(得分:0)
所以这是我能做的最好的事情,但确实解决了这个问题。
计算受益人数量的简单方法之一是:
=A2/counta(split(C2,", "))
这也会将你的列从2个额外的列减少到1个,但是如果要删除它们会有点乱。并且不会很容易扩展。如果你在一个固定的系统中使用它,那么有更好和更简洁的方法来解决这个问题,但这需要一个额外的列来做。
实际上,这样做的方法是将所有信息包含在一行中。
要计算Elizabeth > Elizabeth
,我使用了以下公式:
=sum(if(AND(iferror(search("Elizabeth",C2)),B2="Elizabeth"),(A2/counta(split(C2,", "))),),if(AND(iferror(search("Elizabeth",C3)),B3="Elizabeth"),(A3/counta(split(C3,", "))),), if(AND(iferror(search("Elizabeth",C4)),B4="Elizabeth"),(A4/counta(split(C4,", "))),))
现在你可以看到它相当长的公式,但它可以细分为3行:
=if(AND(iferror(search("Elizabeth",C2)),B2="Elizabeth"),(A2/counta(split(C2,", "))),)
=if(AND(iferror(search("Elizabeth",C3)),B3="Elizabeth"),(A3/counta(split(C3,", "))),)
=if(AND(iferror(search("Elizabeth",C4)),B4="Elizabeth"),(A4/counta(split(C4,", "))),)
这三行的总和就是让你Elizabeth > Elizabeth
。