【问题标题】:Excel: complicated SUMPRODUCT formula neededExcel:需要复杂的 SUMPRODUCT 公式
【发布时间】:2014-07-16 12:08:16
【问题描述】:

我正在寻找一个 SUMPRODUCT 公式,或类似的公式来做同样的事情。它应该执行以下操作:

  1. 在工作表 A 上,它需要忽略不正确的邮政编码,这意味着 不包含 4 个数字和 2 个字母的邮政编码需要 忽略。它还需要考虑到有时有 邮政编码后面的多余空格。有时有一个 数字和字母之间有空格,有时没有。只是 需要比较 4 个数字和 2 个字母。
  2. 需要将工作表 A 上的正确邮政编码与 工作表 B 上的邮政编码。如果它们匹配,则后面的所有值 邮政编码需要总结。如果有其他记录 从相同的邮政编码开始,然后这些需要添加为 好。
  3. 这两个工作表都不需要更改,因为数据经常生成。该公式应该能够在第三个单独的工作表上工作。它应该可以在 Excel 2003 中使用。

编辑:添加第 3 点。

我将添加一张图片来形象化我的意思。希望有人可以帮助我!

【问题讨论】:

  • 不是真的,他必须忽略空格和不正确的数据...
  • 那么如果我理解正确的话,你需要在工作表A的B1中得到9吗? 1112BB 是否等同于 1112 BB
  • @pnuts 哦,我没有注意到下面的第二个。这意味着空间也应该被忽略......
  • 使用一些辅助列会更简单。这是一个选择吗?

标签: excel excel-formula excel-2003


【解决方案1】:

使用一些辅助列,您可以使用类似这样的内容(在新标签中打开以获得更大的版本):

公式:

在 B2 中删除空格,从而获得一个“干净”的 ZIP 并检查长度:

=IF(LEN(SUBSTITUTE(A2," ",""))=6,SUBSTITUTE(A2," ",""),"")

在C2中,求和:

=IFERROR(IF(AND(ISNUMBER(LEFT(B2,4)*1),CODE(MID(LOWER(B2),5,1))>=97,CODE(MID(LOWER(B2),5,1))<=122,CODE(RIGHT(LOWER(B2)))>=97,CODE(RIGHT(LOWER(B2)))<=122),SUMPRODUCT($H$2:$K$8*($G$2:$G$8=B2)),""),"")

在G2中,我使用了与B2中相同的:

=IF(LEN(SUBSTITUTE(F2," ",""))=6,SUBSTITUTE(F2," ",""),"")

没有助手,公式会因为重复部分而变得更长:

=IFERROR(IF(AND(LEN(SUBSTITUTE(A2," ",""))=6,ISNUMBER(LEFT(SUBSTITUTE(A2," ",""),4)*1),CODE(MID(LOWER(SUBSTITUTE(A2," ","")),5,1))>=97,CODE(MID(LOWER(SUBSTITUTE(A2," ","")),5,1))<=122,CODE(RIGHT(LOWER(SUBSTITUTE(A2," ",""))))>=97,CODE(RIGHT(LOWER(SUBSTITUTE(A2," ",""))))<=122),SUMPRODUCT($H$2:$K$8*(SUBSTITUTE($F$2:$F$8," ","")=SUBSTITUTE(A2," ",""))),""),"")

或者

=IFERROR(
    IF(
        AND(
            LEN(SUBSTITUTE(A2," ",""))=6,                      ' Check length
            ISNUMBER(LEFT(SUBSTITUTE(A2," ",""),4)*1),         ' Check numbers
            CODE(MID(LOWER(SUBSTITUTE(A2," ","")),5,1))>=97,   ' Check if letter
            CODE(MID(LOWER(SUBSTITUTE(A2," ","")),5,1))<=122,  ' Check if letter
            CODE(RIGHT(LOWER(SUBSTITUTE(A2," ",""))))>=97,     ' Check if letter
            CODE(RIGHT(LOWER(SUBSTITUTE(A2," ",""))))<=122     ' Check if letter
        ),
        SUMPRODUCT(
            $H$2:$K$8*
            (SUBSTITUTE($F$2:$F$8," ","")=SUBSTITUTE(A2," ",""))),
        ""
    ),
    ""
)

糟糕,忘记了 IFERROR 不是在 2003 年。我使用它的唯一原因是 MID 会返回一个空字符串,而 CODE 随后会给出一个错误。您可以使用下面的方法来确保字符串首先是 6 个字符:

=IF(LEN(SUBSTITUTE(A2," ",""))=6,IF(AND(ISNUMBER(LEFT(SUBSTITUTE(A2," ",""),4)*1),CODE(MID(LOWER(SUBSTITUTE(A2," ","")),5,1))>=97,CODE(MID(LOWER(SUBSTITUTE(A2," ","")),5,1))<=122,CODE(RIGHT(LOWER(SUBSTITUTE(A2," ",""))))>=97,CODE(RIGHT(LOWER(SUBSTITUTE(A2," ",""))))<=122),SUMPRODUCT($H$2:$K$8*(SUBSTITUTE($F$2:$F$8," ","")=SUBSTITUTE(A2," ",""))),""),"")

【讨论】:

  • 我会尽快尝试这个公式。感谢您的反馈!
  • Jerry,您知道这些功能中的哪一个仅适用于 post-Office 2003 吗?当我在 Office 2007 中并尝试保存它时,我收到“此工作簿中的一个或多个函数在 Excel 2007 之前的版本中不可用”错误。这不是一个巨大的交易破坏者,因为我正试图让他们升级 Office,但也许可以在此之前轻松修复公式?
  • @Zoke 添加了一个没有IFERROR 的内容。使用IF(ISERROR() 将使公式的长度增加一倍,因此我会将一个主检查移到外面以避免使其太长,好吧,实际上缩短了几个字符!
  • 谢谢@pnuts。如果我尝试 IF(ISERROR 代替它说这个函数的参数太多。
  • @Jerry 我很困惑。我需要如何更改公式才能让 IF(ISERROR() 代替 IFERROR?
【解决方案2】:

这里有一个验证荷兰邮政编码的公式

=AND(LEN(A2)=6; ISNUMBER(VALUE(LEFT(A2;4))); CODE(MID(LOWER(A2);5;1)) >= 97; CODE(MID(LOWER(A2);5;1)) <= 122; CODE(MID(LOWER(A2);6;1)) >= 97; CODE(MID(LOWER(A2);6;1)) <= 122)

0-9 = ASCII 码 48 到 57
a-z = ASCII 码 97 到 122(小写)

如果您有荷兰语版本的 Excel,则公式为:

=EN(LENGTE(A2)=6; ISGETAL(WAARDE(LINKS(A2;4))); CODE(DEEL(KLEINE.LETTERS(A2);5;1)) >= 97; CODE(DEEL(KLEINE.LETTERS(A2);5;1)) <= 122; CODE(DEEL(KLEINE.LETTERS(A2);6;1)) >= 97; CODE(DEEL(KLEINE.LETTERS(A2);6;1)) <= 122)

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2022-06-12
    • 1970-01-01
    相关资源
    最近更新 更多