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

问题描述 投票:0回答:1

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

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代替“ |”用空格分隔,然后使用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
vba string excel-formula substring delimited-text
1个回答
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)
next i

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

© www.soinside.com 2019 - 2024. All rights reserved.