[关闭]
@BurdenBear 2019-03-19T01:57:41.000000Z 字数 5058 阅读 443

Excel Beautifier

未分类


这里列出了一些工具格式化后的excel公式以及我们预期希望得到的格式化结果。

工具

例子

例1:

  1. =IF(SUM( IF(FOO = BAR, 100 + 3000 + 1000000000000000000000000000000000000000000000000000000 + 10000000000000000000000000000000000000000000000000000000 + 100000000000000000000000000000000000000000000, 0) , SUM(1, 10, 0)) = 20 , "FOO", "BAR")
  1. =IF(
  2. SUM(
  3. IF(
  4. FOO = BAR,
  5. 100 + 3000 + 1000000000000000000000000000000000000000000000000000000 + 10000000000000000000000000000000000000000000000000000000 + 100000000000000000000000000000000000000000000,
  6. 0
  7. ),
  8. SUM(
  9. 1,
  10. 10,
  11. 0
  12. )
  13. ) = 20,
  14. "FOO",
  15. "BAR"
  16. )
  1. = IF(
  2. SUM(
  3. IF(
  4. FOO = BAR,
  5. 100 + 3000 + 1000000000000000000000000000000000000000000000000000000 + 10000000000000000000000000000000000000000000000000000000 + 100000000000000000000000000000000000000000000,
  6. 0
  7. ),
  8. SUM(
  9. 1,
  10. 10,
  11. 0
  12. )
  13. ) = 20,
  14. "FOO",
  15. "BAR"
  16. )
  1. IF(
  2. SUM(
  3. IF(
  4. FOO = BAR, 100 + 3000 +
  5. 1000000000000000000000000000000000000000000000000000000 +
  6. 10000000000000000000000000000000000000000000000000000000 +
  7. 100000000000000000000000000000000000000000000, 0),
  8. SUM(1, 10, 0)) = 20, "FOO", "BAR")

对于含有参数但是很短的公式,不一定需要换行;对于不包含函数的公式,如果计算式很长,也应该进行换行。

例2:

  1. =SUM(12341234, 1234, 1234, 1234123412341234, 1234, 1234, 1234, 123412341234, 123412341234123412341234, SUM({123124, 123124123124, 123124123124, 123124123124, 123124}))
  1. =SUM(
  2. 12341234,
  3. 1234,
  4. 1234,
  5. 1234123412341234,
  6. 1234,
  7. 1234,
  8. 1234,
  9. 123412341234,
  10. 123412341234123412341234,
  11. SUM(
  12. { 123124,
  13. 123124123124,
  14. 123124123124,
  15. 123124123124,
  16. 123124
  17. ARRAYROWSTOP)
  18. ARRAYSTOP)
  19. )
  20. )
  1. = SUM(
  2. 12341234,
  3. 1234,
  4. 1234,
  5. 1234123412341234,
  6. 1234,
  7. 1234,
  8. 1234,
  9. 123412341234,
  10. 123412341234123412341234,
  11. SUM(
  12. {123124,
  13. 123124123124,
  14. 123124123124,
  15. 123124123124,
  16. 123124}
  17. )
  18. )
  1. =SUM(12341234, 1234, 1234, 1234123412341234, 1234, 1234, 1234, 123412341234,
  2. 123412341234123412341234,
  3. SUM({123124, 123124123124, 123124123124, 123124123124, 123124}))

Beautifier的结果包含数组的时候有些BUG,期望的结果要尽可能保持紧凑。

例3:

  1. IF( FOO = BAR, IF( FOO = BAR, IF( FOO = BAR, IF(FOO = BAR, IF(FOO = BAR, IF(FOO = BAR, IF(FOO = BAR, 1, 2), 2), 2), 2), 2), 2), 2)
  1. =IF(
  2. FOO = BAR,
  3. IF(
  4. FOO = BAR,
  5. IF(
  6. FOO = BAR,
  7. IF(
  8. FOO = BAR,
  9. IF(
  10. FOO = BAR,
  11. IF(
  12. FOO = BAR,
  13. IF(
  14. FOO = BAR,
  15. 1,
  16. 2
  17. ),
  18. 2
  19. ),
  20. 2
  21. ),
  22. 2
  23. ),
  24. 2
  25. ),
  26. 2
  27. ),
  28. 2
  29. )
  1. IF(
  2. FOO = BAR,
  3. IF(
  4. FOO = BAR,
  5. IF(
  6. FOO = BAR,
  7. IF(
  8. FOO = BAR,
  9. IF(
  10. FOO = BAR,
  11. IF(
  12. FOO = BAR,
  13. IF(
  14. FOO = BAR,
  15. 1,
  16. 2
  17. ),
  18. 2
  19. ),
  20. 2
  21. ),
  22. 2
  23. ),
  24. 2
  25. ),
  26. 2
  27. ),
  28. 2
  29. )
  1. IF(
  2. FOO = BAR,
  3. IF(
  4. FOO = BAR,
  5. IF(
  6. FOO = BAR,
  7. IF(FOO = BAR,
  8. IF(FOO = BAR, IF(FOO = BAR, IF(FOO = BAR, 1, 2), 2), 2), 2),
  9. 2), 2), 2)

在嵌套比较深的时候确实不好处理,像beautifier其实规则和咱们一开始的版本类似,只是对函数的参数部分进行了换行处理,这样看得比较清楚。yapf的风格是尽量紧凑,可能会牺牲一些代码的可读性。

例4:

  1. =IF((B3="女")*(C3>=55)+(B3="男")*(C3>=60),"退休","")
  1. =IF(
  2. ( B3 = "女" ) * ( C3 >= 55 ) + ( B3 = "男" ) * ( C3 >= 60 ),
  3. "退休",
  4. ""
  5. )
  1. = IF(
  2. (
  3. B3 = "女"
  4. ) * (
  5. C3 >= 55
  6. ) + (
  7. B3 = "男"
  8. ) * (
  9. C3 >= 60
  10. ),
  11. "退休",
  12. ""
  13. )
  1. =IF(
  2. (B3 = "女") * (C3 >= 55) + (B3 = "男") * (C3 >= 60),
  3. "退休",
  4. ""
  5. )

例5:

  1. =VLOOKUP(F8,IF({1,0},$B$4:$B$9,$A$4:$A$9),2,0)
  1. =VLOOKUP(
  2. F8,
  3. IF(
  4. {1,0},
  5. $B$4:$B$9,
  6. $A$4:$A$9
  7. ),
  8. 2,
  9. 0
  10. )
  1. = VLOOKUP(
  2. F8,
  3. IF(
  4. {1,
  5. 0},
  6. $B4:$B9,
  7. $A4:$A9
  8. ),
  9. 2,
  10. 0
  11. )
  1. =VLOOKUP(
  2. F8,
  3. IF(
  4. {1, 0},
  5. $B$4:$B$9,
  6. $A$4:$A$9
  7. ), 2, 0)

例6:

  1. =SUM(SUMIF(A13:A20,{"北京","上海","广州"},B13:B20))
  1. =SUM(
  2. SUMIF(
  3. A13:A20,
  4. {"北京","上海","广州"},
  5. B13:B20
  6. )
  7. )
  1. = SUM(
  2. SUMIF(
  3. A13:A20,
  4. {"北京",
  5. "上海",
  6. "广州"},
  7. B13:B20
  8. )
  9. )
  1. =SUM(SUMIF(
  2. A13:A20,
  3. {"北京", "上海", "广州"},
  4. B13:B20))

例7:

  1. =INDEX(B24:F32,MATCH(I24,A24:A32,0),MATCH(I25,B23:F23,0))
  1. =INDEX(
  2. B24:F32,
  3. MATCH(
  4. I24,
  5. A24:A32,
  6. 0
  7. ),
  8. MATCH(
  9. I25,
  10. B23:F23,
  11. 0
  12. )
  13. )
  1. = INDEX(
  2. B24:F32,
  3. MATCH(
  4. I24,
  5. A24:A32,
  6. 0
  7. ),
  8. MATCH(
  9. I25,
  10. B23:F23,
  11. 0
  12. )
  13. )
  1. =INDEX(
  2. B24:F32,
  3. MATCH(I24, A24:A32, 0),
  4. MATCH(I25, B23:F23, 0))

例8:

  1. =B36&COUNTIF(B$36:B36,B36)
  1. =B36 &
  2. COUNTIF(
  3. B$36:B36,
  4. B36
  5. )
  1. = B36&COUNTIF(
  2. B$36:B36,
  3. B36
  4. )
  1. = B36 & COUNTIF(B$36:B36, B36)

例9

  1. =IF(A2>=90,"優等",IF(A2>=80,"甲等",IF(A2>=70,"乙等","丙等")))
  1. =IF(
  2. A2 >= 90,
  3. "優等",
  4. IF(
  5. A2 >= 80,
  6. "甲等",
  7. IF(
  8. A2 >= 70,
  9. "乙等",
  10. "丙等"
  11. )
  12. )
  13. )
  1. = IF(
  2. A2 >= 90,
  3. "優等",
  4. IF(
  5. A2 >= 80,
  6. "甲等",
  7. IF(
  8. A2 >= 70,
  9. "乙等",
  10. "丙等"
  11. )
  12. )
  13. )
  1. =IF(A2 >= 90,
  2. "優等",
  3. IF(A2 >= 80,
  4. "甲等",
  5. IF(A2 >= 70, "乙等", "丙等")))

例10:

  1. =SUMIF(A54:A66,">=2018/1/1",C54:C66)-SUMIF(A54:A66,">=2018/6/1",C54:C66)
  1. =SUMIF(
  2. A54:A66,
  3. ">=2018/1/1",
  4. C54:C66
  5. ) -
  6. SUMIF(
  7. A54:A66,
  8. ">=2018/6/1",
  9. C54:C66
  10. )
  1. = SUMIF(
  2. A54:A66,
  3. ">=2018/1/1",
  4. C54:C66
  5. ) - SUMIF(
  6. A54:A66,
  7. ">=2018/6/1",
  8. C54:C66
  9. )
  1. =SUMIF(A54:A66,
  2. ">=2018/1/1",
  3. C54:C66)
  4. - SUMIF(A54:A66,
  5. ">=2018/6/1",
  6. C54:C66)

例11:

  1. =SUM(SUMIF(A54:A66,{">=2018/1/1",">=2018/6/1"},C54:C66) * {1,-1})
  1. =SUM(
  2. SUMIF(
  3. A54:A66,
  4. { ">=2018/1/1", ">=2018/6/1" },
  5. C54:C66
  6. ) * { 1, - 1}
  7. )
  1. = SUM(
  2. SUMIF(
  3. A54:A66,
  4. {">=2018/1/1",
  5. ">=2018/6/1"},
  6. C54:C66
  7. ) * {1,
  8. -1}
  9. )
  1. =SUM(SUMIF(A54:A66,
  2. {">=2018/1/1", ">=2018/6/1"},
  3. C54:C66) * {1, -1})

例12:

  1. =AVERAGEIFS($D$71:$D$76, $E$71:$E$76, "<23", $E$71:$E$76, ">18.5")
  1. =AVERAGEIFS(
  2. $D$71:$D$76,
  3. $E$71:$E$76,
  4. "<23",
  5. $E$71:$E$76,
  6. ">18.5"
  7. )
  1. = AVERAGEIFS(
  2. $D$71:$D$76,
  3. $E$71:$E$76,
  4. "<23",
  5. $E$71:$E$76,
  6. ">18.5"
  7. )
  1. =AVERAGEIFS(
  2. $D$71:$D$76,
  3. $E$71:$E$76,
  4. "<23",
  5. $E$71:$E$76,
  6. ">18.5")

这里还有个想法,如果都是简单的式子,可不可以把判断区域和判断条件放到一行。例如这样:

  1. =AVERAGEIFS(
  2. $D$71:$D$76,
  3. $E$71:$E$76, "<23",
  4. $E$71:$E$76, ">18.5")

例13:

  1. =IFERROR(INDEX($B$81:$B$91,SMALL(IF(D$80=$A$81:$A$91,ROW($B$81:$B$91)-2,""), ROW()-2)),"")
  1. =IFERROR(
  2. INDEX(
  3. $B$81:$B$91,
  4. SMALL(
  5. IF(
  6. D$80 = $A$81:$A$91,
  7. ROW(
  8. $B$81:$B$91
  9. ) - 2,
  10. ""
  11. ),
  12. ROW(
  13. ) - 2
  14. )
  15. ),
  16. ""
  17. )
  1. = IFERROR(
  2. INDEX(
  3. $B$81:$B$91,
  4. SMALL(
  5. IF(
  6. D$80 = $A$81:$A$91,
  7. ROW(
  8. $B$81:$B$91
  9. )-2,
  10. ""
  11. ),
  12. ROW()-2
  13. )
  14. ),
  15. ""
  16. )
  1. =IFERROR(
  2. INDEX(
  3. $B$81:$B$91,
  4. SMALL(
  5. IF(
  6. D$80 = $A$81:$A$91,
  7. ROW($B$81:$B$91) - 2,
  8. ""
  9. ),
  10. ROW() - 2)),
  11. "")
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注