【问题标题】:Count names, divide value by counted names and solve owes statement计算名称,将值除以计算名称并解决欠条语句
【发布时间】:2018-01-11 07:59:16
【问题描述】:

我正在尝试使用 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,我使用以下公式将列AD 分开(放入单元格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() 或其他类似公式计算语句?可能有一种更简单的方法可以解决我的问题,我们将不胜感激。谢谢!

【问题讨论】:

    标签: excel google-sheets


    【解决方案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
    

    【讨论】:

    • 非常感谢,它运行良好!如果(且仅当)列 E(当前在我的文件中不可用)值(E1、E2 等)为空白时,您是否知道如何求和 Amount (Col3)?我试图在你提供的公式中添加它但没有成功。再次感谢!
    • 您需要将公式中的所有范围替换为过滤器:将C2:C 更改为filter(C2:C,E2:E="")B2:B 更改为filter(B2:B,E2:E="")A2:A 更改为filter(A2:A,E2:E="")
    • 很遗憾,过滤器选项不起作用。你知道任何替代方案吗?非常感谢!
    【解决方案2】:

    我想这取决于您希望如何呈现谁欠谁的最终总数。

    这会将金额(A 列)除以用逗号分隔的受益人数量(C 列)。

    =A2/(LEN(TRIM(C2))-LEN(SUBSTITUTE(TRIM(C2),",",""))+1)
    

    【讨论】:

      【解决方案3】:

      所以这是我能做的最好的,但它确实解决了问题。

      第一个计算受益人数量的更简单方法是:

      =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,", "))),)

      这 3 行的总和是您到达 Elizabeth > Elizabeth 的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        相关资源
        最近更新 更多