Excel의 "텍스트를 열로" 기능의 결과를 '오른쪽으로 정렬'하려면 어떻게 해야 합니까?

Excel의 "텍스트를 열로" 기능의 결과를 '오른쪽으로 정렬'하려면 어떻게 해야 합니까?

다음 데이터에 대해 Text to Columns 기능을 사용하는 경우 ";"를 사용합니다. 구분 기호로:

foo;bar;qux;baz;토스트;
quux;잼;콩;

결과 셀 그리드에 "왼쪽 정렬" 결과가 표시됩니다.

 |foo   |bar   |qux   |baz   |toast |
 |quux  |jam   |beans |      |      |

그러나 나는 "오른쪽 정렬"을 원합니다.

 |foo   |bar   |qux   |baz   |toast |
 |      |      |quux  |jam   |beans |

어떻게 해야 하나요?

메모:나는 "오른쪽 정렬"이 올바른 용어가 아닐 수도 있다는 것을 알고 있습니다.

|   foo|   bar|   qux|   baz| toast| 
|  quux|   jam| beans|      |      |

하지만 이것은 내가 찾고 있는 것이 아니다. 그러므로 내가 설명하는 내용에 대해 더 나은 용어를 제안할 수 있는 사람이 있다면 그렇게 하십시오.

부록:대안으로, Excel을 사용하여 셀을 재배열하는 방법을 아는 사람이 있다면

 |a   |b   |c   |d   |    |    |    |    |    |
 |n   |m   |o   |p   |q   |    |    |    |    |
 |e   |f   |g   |h   |i   |j   |k   |l   |    |
 |n   |m   |o   |p   |q   |    |    |    |    |
 |x   |    |    |    |    |    |    |    |    |

된다

 |    |    |    |    |    |a   |b   |c   |d   |
 |    |    |    |    |n   |m   |o   |p   |q   |
 |    |e   |f   |g   |h   |i   |j   |k   |l   |
 |    |    |    |    |n   |m   |o   |p   |q   |
 |    |    |    |    |    |    |    |    |x   |

그러면 그것도 효과가 있을 것입니다.

답변1

다음 수식을 사용하면 텍스트에서 열로 설명된 대로 오른쪽 정렬을 쉽게 구문 분석할 수 있는 형식으로 데이터를 빠르게 변환할 수 있습니다.

엑셀 캡처

D5공식(없을 경우 세미콜론 추가):

=IF(RIGHT(B5,1)<>";",B5&";",B5)

G5수식(필요한 수의 세미콜론 앞에 추가):

=REPT(";",5-(LEN(D5)-LEN(SUBSTITUTE(D5,";",""))))&D5

결과를 복사한 후 값으로 선택하여 붙여넣으면 텍스트-열 변환에 적합한 원시 자료가 제공됩니다.

해결책은 고정된 최대 열 수에 따라 달라집니다. 여기, 다섯 개. G5시트의 다른 위치에 '생성할 열 수' 셀을 추가하고 하드 코딩된 값 대신 이 새 셀을 참조하여 의 공식을 일반화할 수 있습니다 5.

또한 데이터에 항상 후행 세미콜론이 있다는 것이 보장되는 경우 중간 단계는 D5:D7불필요합니다.

편집하다:주석에서 Some_Guy의 관찰에 따르면 모든 행이 다음과 같이 구성된 경우에도 이 방법이 작동합니다.부족후행 세미콜론.

답변2

언급한 바와 같이, 이것은 텍스트를 열에 연결하는 표준 기능이 아닙니다. 또는 제가 알고 있는 Excel에서 이 작업을 수행하는 고유한 방법이 있습니까? 그러나 이 VBA가 이를 수행합니다(채워진 셀 사이에 공백이 없다고 가정)-

Sub test()
Dim lrow As Integer
lrow = Cells(Rows.Count, "A").End(xlUp).Row

Dim lcol As Integer
lcol = Cells("1", Columns.Count).End(xlToLeft).Column

Dim lfcol As Integer
Dim dif As Integer
For i = 1 To lrow
    lfcol = Cells(i, Columns.Count).End(xlToLeft).Column
    dif = lcol - lfcol
    For j = lfcol To 1 Step -1
        If dif = 0 Then Exit For
        If Not Cells(i, j) Is Nothing Then
            Cells(i, j + dif) = Cells(i, j)
            Cells(i, j) = vbNullString
        End If
    Next
Next
End Sub

답변3

이를 수행하는 또 다른 VBA 루틴이 있습니다. 텍스트를 열로 변환한 다음 데이터를 넣을 직사각형 범위(예: 열 A-(최대 필드) × 행)를 선택하고 이 매크로를 실행하세요. 보다MS Office에 VBA를 어떻게 추가하나요? 교육자료용.

Sub Copy_Right()
    For Each rr In Selection.Rows
        For cn = Selection.Columns.Count To 1 Step -1
            If Len(rr.Cells(1, cn)) > 0 Then Exit For
        Next cn
        ' cn is now the (relative) column number of the last cell in this row
        ' that contains (non-blank) data.
        my_offset = Selection.Columns.Count - cn
        ' my_offset is how many columns to the right we need to move.
        ' If my_offset = 0, the row is full of data (or, at least,
        ' the last column contains data; there may be blank cells
        ' to its left), so there’s nowhere to move it.
        ' If cn = 0, the row is empty, so there’s nothing to move.
        If cn = 0 Or my_offset = 0 Then
            ' Nothing to do.
        Else
            For cn = Selection.Columns.Count To 1 Step -1
                If cn > my_offset Then
                    ' Copy data to the right.
                    rr.Cells(1, cn) = rr.Cells(1, cn - my_offset)
                Else
                    ' Set the cells on the left to blank.
                    rr.Cells(1, cn) = ""
                End If
            Next cn
        End If
    Next rr
End Sub

이것~ 할 것이다포함된 빈 셀(예: the;quick;;fox;)을 올바르게 처리합니다. 그렇지 않으면 이 답변과 다른 답변의 차이점은 단지 임의적인 개인 취향일 뿐이며 다른 답변이 내가 이해하지 못하는 방식으로 우수할 수도 있습니다.

관련 정보