Используйте VBA в Excel для извлечения первой и последней разделенной подстроки (непустая подстрока) - PullRequest
0 голосов
/ 03 октября 2019

У меня есть столбец, в котором каждая ячейка содержит данные в этом формате:

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)))

Это в основном использует ЗАМЕНА вместо "|"разделить пробелами, затем использовать 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 голосов
/ 03 октября 2019

скажем, ваш рабочий лист - 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

Не проверено, но это должно работать
Приятель, приятель!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...