【问题标题】:Excel - Understanding a SUMPRODUCT formulaExcel - 了解 SUMPRODUCT 公式
【发布时间】:2017-10-13 04:25:34
【问题描述】:

我有这个没有文档的人创建的 Excel 公式,我很难理解它。

=SUMPRODUCT(-MID(TEXT(MID(TEXT(F2,REPT(0,15)),ROW(INDIRECT("1:15")),1)*{2;1;2;1;2;1;2;1;2;1;2;1;2;1;2},"00"),{1,2},1))

看起来它从另一个数字创建了一个“随机”数字。 我正在努力解决的关键问题很少:
* 为什么有一个数组 ({1,2}) 给 MID() 函数?
* 因为有一个SUMPRODUCT(),它需要一个数组,我假设-MID() 函数的结果是某种数组,我怎么看它是什么?
* 乘以数组 {2;1;2;1;2;1;2;1;2;1;2;1;2;1;2} 有什么作用?
* INDIRECT() 函数似乎总是返回 1?

任何帮助都会得到帮助。

【问题讨论】:

  • INDIRECT(1:15) 返回一个包含从 1 到 15 的所有数字的数组。然后将 F2 中的每个字符乘以 2 或 1(交替)。它看起来像计算信用卡号码的校验位,但我可以测试它,因为我只有我的手机......
  • 同意 Jerry,它是用于信用卡校验位,尝试谷歌搜索“Luhn 算法”或类似的(虽然这个计算可能略有不同)

标签: excel excel-formula


【解决方案1】:

EXCEL中有一个函数叫公式求值,是一步步检查公式的好工具。

假设 F2 为 123

  1. REPT(0,15)

    生成一个有15个“0”的字符串,即"000000000000000"

  2. TEXT(F2,[1])

    将 F2 转换为 15 个字符的字符串。例如。 123 > "000000000000123"

  3. ROW(INDIRECT("1:15"))

    返回一个数组{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}

  4. MID([2],[3],1)

    将[2]分隔成一个数组,每个元素都是一个char {"0";"0";"0";"0";"0";"0";"0";"0";"0";"0";"0";"0";"1";"2";"3"}

  5. [4]*{2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}

    {A;B} * {C;D} = {A*C;B*D}

    {"0";"0";"0";"0";"0";"0";"0";"0";"0";"0";"0";"0";"1";"2";"3"}*{2;1;2;1;2;1;2;1;2;1;2;1;2;1;2} ={0*2;0*1;0*2;....}={0;0;0;0;0;0;0;0;0;0;0;0;2;2;6}

  6. TEXT([5],"00")

    通过在前面添加“0”将数组中的元素转换为两个字符。数组转到{"00";"00";"00";"00";"00";"00";"00";"00";"00";"00";"00";"00";"02";"02";"06"}

  7. MID([6],{1,2},1)

    注意 {A,B} 和 {A;B} 是不同的。 {A,B} 是一个 1 行 2 列的数组; {A;B} 是一个 2 行 1 列的数组。

    在这个公式中,你可以想象做两次 MID,第一次我们使用 1 作为第二个参数,第二次我们使用 2 代替。

    结果是一个二维数组: {"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","0";"0","2";"0","2";"0","6"}

  8. SUMPRODUCT(-[7])

    [7] 之前的减号将强制数组中的所有元素转换为符号相反的数字。 在这个例子中,它总和0+0+0+...+(-2)+0+(-2)+0+(-6) = -10

【讨论】:

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