VB(A)

대괄호 이동

당근쨈 2015. 7. 27. 10:06
글자 속에 녹아있는 대괄호 안의 글자들을 맨 뒤로 보낸 뒤 다시 대괄호로 묶어주는 매크로
대괄호가 있는 것과 없는 것을 구분해서 배열에 넣은 뒤 대괄호만 따로 처리할까 고민하다가
대괄호가 있는 것만 배열에 넣고
중간에 끼인 대괄호를 없애고 앞뒤로 대괄호를 다시 붙여주고
기존 글자와 합쳐주는
단순무식한 매크로.
무언가, 배열을 멋지게 쓰고 싶었는데, 잘 모르겠다.

Sub Macro()
 
    Dim stR As String
    Dim strR As String
    Dim rnG As Range
    Dim rngA As Range
    Dim varT() As String
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
 
    '바꿀 열 선택
    Set rngA = Range("A1", Cells(Rows.Count, "A").End(xlUp))
 
    '기존 자료 삭제
    Columns("B").ClearContents
 
    For Each rnG In rngA
        stR = rnG
 
        '[] 안에 든 글자들을 배열에 삽입
        For i = 1 To Len(stR)
            j = j + 1
 
            If Mid(stR, i, 1= "[" Then
                Do
                    strR = strR & Mid(stR, j, 1)
                    If Mid(stR, j, 1= "]" Then
                        ReDim Preserve varT(k)
                        varT(k) = strR
                        k = k + 1
                        strR = vbNullString
                        j = i
                        Exit Do
                    End If
                    j = j + 1
                Loop
            End If
        Next i
 
        'str중 [] 안에 든 글자들은 삭제
        For i = 0 To k - 1
            stR = Replace(stR, varT(i), "")
        Next i
 
        '[]글자를 join 해서 대괄호 삭제 후 앞뒤로 대괄호 다시 입력
        strR = Join(varT)
        strR = Replace(strR, "[""")
        strR = Replace(strR, "]""")
        strR = "[" & strR & "]"
        stR = Replace(stR & strR, " """)
        strR = vbNullString
 
        '배열 초기화
        Erase varT
        rnG.Offset(, 1= stR
    Next rnG
End Sub
cs




대괄호 이동.xlsm