Синтаксический анализ списка в Excel VBA?

#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>"