从分隔符连接的字符串中提取子字符串
有时候,在工作表单元格中有一些以某分隔符连接的字符串,如图1中的单元格A1,其内容是以逗号连接城市名。

图1
如果我们想要提取其中的某个城市,例如第8个子字符串表示的城市名,则可以使用下面的公式:
=TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",999)),8*999-998,999))
在公式中,先使用SUBSTITUTE函数以999个空格来替换字符串中的每个分隔符,然后使用MID函数提取所需要的子字符串(前后都含有空格),最后使用TRIM函数去掉字符串首尾的空格获得最终的结果。由于每个子字符串远小于999,因此不用担心位置参数不合适而得到错误结果。
如果想要提取字符串中的每个子字符串并将它们分别放置在不同的单元格中,则可以使用公式:
=TRIM(MID(SUBSTITUTE($A$1,",",REPT("",999)),COLUMN(A1)*999-998,999))
结果如下图2所示。

图2
在图2所示的工作表中,在单元格B3中输入上面的公式,向右拖至单元格K3。
在公式中,COLUMN(A1)的值为1,向右拖动1列,将变为COLUMN(B1),值为2,依此类推,从而顺序提取子字符串的值。
好好讲道理:反击谬误的逻辑学训练(Attacking Faulty Reasoning)(美国30余所大学通用的逻辑学教材)(如果你只打算买一本关于批判性思维的书,本书是不二选择!)
作者:[美]T.爱德华戴默 著,黄琳,刀尔登 译
一般公式
从上面的演示中,我们可以得到实现此种情况的一般公式为:
=TRIM(MID(SUBSTITUTE(字符串所在单元格,分隔符,REPT("",999)),子字符串位置*999-998,999))
公式中的数字999可以随字符串的长度而定,只是要取得足够大即可。
更进一步
如果要从字符串的结尾开始提取指定位置的子字符串呢?如图3所示,要提取单元格A1中倒数第3个子字符串。

图3
我们已经给出的公式为:
=TRIM(MID(SUBSTITUTE(A1,",",REPT("",999)),(2-3+(LEN(A1)-LEN(SUBSTITUTE(A1,",","")))/LEN(","))*999-998,999))
一般的公式为:
=TRIM(MID(SUBSTITUTE(字符串所在单元格,分隔符,REPT("",999)),(2-子字符串位置+(LEN(字符串所在单元格)-LEN(SUBSTITUTE(字符串所在单元格,分隔符,"")))/LEN(分隔符))*999-998,999))
上例中,可以使用一个更好的公式得到同样的结果:
=TRIM(LEFT(RIGHT(SUBSTITUTE(","&A1,",",REPT("",999)),3*999),999))
这也可以避免子字符串位置超过了字符串实际位置时出现的错误。
一般的公式为:
=TRIM(LEFT(RIGHT(SUBSTITUTE(分隔符&字符串所在单元格,分隔符,REPT(" ",999)),子字符串位置*999),999))
公式中的999是取的一个较大的数字,这个数字至少应大于字符串所在单元格中的字符数。