#excel #vba #excel-formula
#преуспеть #vba #excel-формула
Вопрос:
Я не слишком хорошо знаком с тем, как классифицировать данные как массив и анализировать их с помощью Excel.
Вот пример того, что я пытаюсь сделать:
ячейка A1 имеет ["1","2","3"]
Я пытаюсь создать формулу, которая превратит это в
<aa>1</aa><aa>2</aa><aa>3</aa>
Я не знаю, как бы я превратил ячейку A1 в массив для VBA в цикл.
Ответ №1:
VBA не требуется. В ячейку B1
вставьте эту формулу:
=SUBSTITUTE(SUBSTITUTE(MID(A1,2,LEN(A1)-2)amp;",",""",","</aa>"),"""","<aa>")
А вот немного более короткая версия, созданная на основе комментария @JvdV. Он использует на один вызов функции меньше… но еще одна конкатенация строк.
="<aa>"amp;SUBSTITUTE(MID(A1,3,LEN(A1)-4),""",""","</aa><aa>")amp;"</aa>"
Комментарии:
1. @JvdV Ваша формула оставляет несколько кавычек в результате. Он не работает должным образом.
2. @JvdV Я исправил это для вас:
="<aa>"amp;SUBSTITUTE(MID(A1,3,LEN(A1)-4),""",""","</aa><aa>")amp;"</aa>"
3. Где-то эти кавычки trippe потерялись в механизме перевода. =)
Ответ №2:
Просто проанализировал его вручную. Если у кого-нибудь есть лучший способ, я бы хотел научиться. Спасибо!
Function ParseList(str As String)
str = Replace(str, Chr(34), "")
str = Replace(str, "[", "")
str = Replace(str, "]", "")
Dim LArray() As String
Dim result As String
LArray = Split(str, ",")
For Each word In LArray
ParseList = ParseList amp; "<aa>" amp; word amp; "</aa>"
Next word
End Function
Комментарии:
1.
Debug.Print "<aa>" amp; Join(Evaluate(Replace(Replace(Range("A1").Value, "[", "{"), "]", "}")), "</aa><aa>") amp; "</aa>"