拉出组合在一列中的特定字符

时间:2017-11-18 15:22:30

标签: excel

我有一个数据提取,导致字段被合并到A列中:

Sales Figures Report pg 121
Walmart Inc. 001230134 99 Associates Parkway 56.12 20.00 10.00 86.12 00 1
1400.25 262.40 14.50 1677.15 02 9
50.00 100.25 10.00 160.25 00 1
1400.25 262.40 14.50 1677.15 02 9

这种格式有超过50,000行,有些稍微不同,因为他们从供应商信息开始,然后在那些值之后(仍然在col.A中)。在上面的例子中,1677.15是之前三个数字的组合值,即应付的总金额。

最初我想基本上使用left()mid()right()等内容来区分每个值。不过,此时我想要的只是总数,即$ 1677.15 in上面的例子。这样做的最佳非vba方法是什么?

两个问题:

  • 问题是金额并不总是相同的位数(范围从$ xx.xx到$ xxx,xxx.xx)
  • 因为有多个"。"你不能使用search()来找到正确的角色位置。

1 个答案:

答案 0 :(得分:0)

在您的示例中,总计数字始终是最后的第三个组。在这种情况下,您可以使用以下公式和定义的名称:

=IFERROR(--INDEX(TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),seq_99,99)),LEN(A1)-LEN(SUBSTITUTE(A1," ",""))-1),"")

定义的名称

seq refers to:      =ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))
seq_99 refers to:   =IF(seq=1,1,(seq-1)*99)

在公式中,

  • SUBSTITUTE:用大量(99)空格替换所有空格
  • MID返回由每个单词组成的数组(空格分隔)
  • TRIM删除多余空格的字词
  • INDEX返回距离结尾第三位的项目。
  • IFERROR处理第一行,不包含相关模式。
  • seqseq_99返回{ 1,2,3,...} and {1,99,198,...}的数组用于公式

enter image description here