【问题标题】:Excel: Dividing comma separated single cell numbersExcel:除以逗号分隔的单个单元格数字
【发布时间】:2016-11-20 04:54:08
【问题描述】:

我在一个用逗号分隔的 Excel 单元格中有一串数字,例如A2 = "4,3,2,7"。我想要一个公式能够在单元格B2 中将这些数字除以 2,例如B2 = "2,1,1,3"(奇数应该向下取整而不是向上取整)

公式需要能够说明:
- 更小或更大的数字串
- 适用于一位数和两位数
- 偶数或奇数
- 没有 VBA
- 公式可以使用多列,但不能使用分隔文本到列功能(由于单元格位置)

我能够得到一个公式来对 A2 (4,3,2,7 = 16) 中的数字字符串求和,但不能除以 2。我对字符串求和的公式如下。任何帮助表示赞赏,谢谢!

{=SUM(IF(ISERR(VALUE(MID(A2,ROW($A$1:OFFSET($A$1,LEN(A2)-1,0‌​)),1))),0,VALUE(MID(‌​A2,ROW($A$1:OFFSET($‌​A$1,LEN(A2)-1,0)),1)‌​)))}

【问题讨论】:

  • 总是有 4 个元素吗?我认为没有 VBA 的可变数量的参数是不可行的
  • 这个网站不是“告诉我代码”之类的。首先,尝试自己,如果遇到困难,请编写公式/代码,然后寻求帮助。
  • 你应该写下你迄今为止尝试过的东西,并更好地说明你的目标和问题。
  • 上面用我的公式更新的问题
  • 经过一番探索,我决定用单细胞公式是不可能的。您有两种方法:使用更多列来解析它们或使用 VBA 创建自定义公式。

标签: excel comma


【解决方案1】:

在您的示例中,将此公式用于单元格B1

=SUBSTITUTE(SUBSTITUTE(A1,",","000")/2,"000",",")

那么结果会是这样的:

 |    A    |    B    |
 +---------+---------+  
1| 4,2,6,8 | 2,1,3,4 |
2|

【讨论】:

  • 独创性的标志 - 我不认为更通用的解决方案是可行的,除非可能在 Excel 2016 中使用 TEXTJOIN
  • 我支持 Tom 的 +1 创意。
  • bzimor - 替代公式似乎适用于偶数,但不适用于奇数或字符串较长时
  • Tom - 我有 2016 Excel,将尝试进行文本连接,但这似乎起到连接的作用。我想我可能必须将数据拆分为单个单元格,然后重新加入单个单元格
  • 布拉德,你说“我想要一个单细胞公式”。另外,您没有为数字编写任何标准
【解决方案2】:

嗯,这是我第二次尝试解决(我希望)你的问题。如果您的字符串在单元格A2 中,则将此代码放入单元格B2

=LEFT(IFERROR(ROUNDDOWN(MID(A2,1,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,3,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,5,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,7,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,9,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,11,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,13,1)/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,15,1)/2,0),""),LEN(A2))

它最多可以处理 8 个数字字符串,以及奇数。

更新

这个公式可以处理两位数,但它只支持1到4个字符串数字(例如(25,5,36,48)):

=LEFT(IFERROR(ROUNDDOWN(MID(A2,1,IFERROR(SEARCH(",",A2,1)-1,LEN(A2)))/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,SEARCH(",",A2,1)+1,IFERROR(SEARCH(",",A2,SEARCH(",",A2,1)+1)-SEARCH(",",A2,1)-1,LEN(A2)-SEARCH(",",A2,1)))/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,SEARCH(",",A2,SEARCH(",",A2,1)+1)+1,IFERROR(SEARCH(",",A2,SEARCH(",",A2,SEARCH(",",A2,1)+1)+1)-SEARCH(",",A2,SEARCH(",",A2,1)+1)-1,LEN(A2)-SEARCH(",",A2,SEARCH(",",A2,1))))/2,0),"")&","&IFERROR(ROUNDDOWN(MID(A2,SEARCH(",",A2,SEARCH(",",A2,SEARCH(",",A2,1)+1)+1)+1,IFERROR(SEARCH(",",A2,SEARCH(",",A2,SEARCH(",",A2,SEARCH(",",A2,1)+1)+1)+1)-SEARCH(",",A2,SEARCH(",",A2,SEARCH(",",A2,1)+1)+1)-1,LEN(A2)-SEARCH(",",A2,SEARCH(",",A2,SEARCH(",",A2,1)+1)+1)))/2,0),""),LEN(A2))

【讨论】:

  • 这非常适合个位数,谢谢!是否可以同时调整一位数和两位数?不需要考虑三位数或以上。
  • 哈,听起来不错。我将努力扩展公式以支持更大的字符串。谢谢!