Разделить строку с помощью Excel Vba и восстановить только элемент между [] - PullRequest
0 голосов
/ 29 марта 2020

У меня есть строка вида:

"word 1, word 2, ..., word n, [Etiquette], many other words"

Я хотел бы получить только «Этикет» и поместить его в переменную.

На данный момент, например, v = "blabla, [Etiquette]"

Я знаю, что могу использовать функцию Split, но когда я просто пытаюсь отобразить Debug.Print Split(v), я получаю ошибку типа.

Спасибо за вашу помощь!

Ответы [ 3 ]

5 голосов
/ 29 марта 2020

Это подход:

1, Filter(Split(x, ","), "[") получить строки, содержащие "[...]"

2, объединить эти строки в одну с помощью join function (это позволяет избежать ошибки, которые возникают, когда фильтр ничего не возвращает)

3, удалите символы "[" и "]" с помощью replace function

4, удалите ненужные пробелы с помощью trim function

. Вот код теста:

Sub Test()
x = "word 1, word 2, ..., word n, [Etiquette], many other words"
z = Trim(Replace(Replace(Join(Filter(Split(x, ","), "["), ","), "[", ""), "]", ""))
'z = Replace(Join(Filter(Split(Replace(x, "[", "]#"), "]"), "#"), ","), "#", "")'vs2
Debug.Print Z
End Sub
2 голосов
/ 29 марта 2020

Вы можете просто использовать

Split(Split(v, "[")(1), "]")(0)

как например

Dim v As String, r As String
v = "word 1, word 2, ..., word n, [Etiquette], many other words"
r = Split(Split(v, "[")(1), "]")(0)
0 голосов
/ 29 марта 2020

Мини-альтернатива

Просто в дополнение к вышеприведенному тонкому решению и для демонстрации того, что, добавляя символ разделителя в строку, которую нужно разделить, вы можете избежать ошибки, если Nothing найдено.

Sub Example()
Const L = "[", R = "]", C = ","    ' used delimiters
Dim x As String, z As String
x = "word 1, word 2, ..., word n, Etiquette, many other words"

z = Split(Split(Split(x & L, L)(1) & R, R)(0) & C, C)(0)
Debug.Print "z = " & Chr(34) & z & Chr(34)
End Sub

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