计算名称,按计数名称划分值并解决欠款声明

时间:2018-01-09 21:07:08

标签: excel google-sheets

我尝试使用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

目前,我已经创建了两个新列DE,分别称为NumberAmount/Number

对于第一个Number,我使用以下公式计算列C名称(放在单元格D2中):

=COUNTIF(C2;"*"&"Elizabeth"&"*") + COUNTIF(C2;"*"&"James"&"*") + COUNTIF(C2;"*"&"Michael"&"*")

对于第二个Amount/Number,我使用以下公式(放在单元格A中)将列DE2分开:

=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计算语句而不创建列NumberE)和Amount/Number=SUMPRODUCT())还是一些类似的公式?可能有一种更简单的方法来解决我的问题,您的帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

Google表格

请尝试公式

=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