在Excel中使用VBA提取第一个和最后一个定界子字符串(非空子字符串)

时间:2019-10-03 14:39:19

标签: vba string excel-formula substring delimited-text

我有一列,其中每个单元格包含以下格式的数据:

ABC |  DEF |  GHI |   |

ABC |  DEF |  GHI | JKL |

ABC |  DEF |   |   |

我需要提取第一个和最后一个有效(即不为空)子字符串。 我可以使用公式轻松提取第一个/最后一个子字符串(尽管它很笨拙):

 FIRST SUBSTRING
        =TRIM(MID(SUBSTITUTE(A1,"|",REPT(" ",LEN(A1))),(4-4)*LEN(A1)+1,LEN(A1)))

LAST SUBSTRING
        =TRIM(MID(SUBSTITUTE(A1,"|",REPT(" ",LEN(A1))),(4-1)*LEN(A1)+1,LEN(A1)))

这基本上是用SUBSTITUE代替“ |”使用空格分隔的delim,然后使用MID提取第n个子字符串,然后使用TRIM替换多余的空格...但是,如果最后一个定界的子字符串为空,则返回一个空字符串(按我的意思)。

如何修改此公式以提取最后一个有效的子字符串(即不为空的“”)。有人可以告诉我如何使用VBA代码执行此操作吗?

    ABC |  DEF |  GHI |   |
Output column 1: ABC
Output column 2: GHI

    ABC |  DEF |  GHI | JKL |
Output column 1: ABC
Output column 2: JKL

    ABC |  DEF |   |   |
Output column 1: ABC
Output column 2: DEF

1 个答案:

答案 0 :(得分:0)

假设您的工作表是WS
并且您的值从A2单元格开始直到A120

dim zeValue$, out1$, out2$
dim i as int

for i = 2 to 120
   zeValue = replace(replace(WS.range("A" & i),' ',''),'|','')
   out1 = left$(zeValue,3)
   out2 = right$(WS.range(zeValue, 3)
   debug.print('out1 : '+out1)
   debug.print('out2 : '+out2)
next i

未经测试,但应该可以工作
祝你好运!!