
다음 데이터에 대해 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;
)을 올바르게 처리합니다. 그렇지 않으면 이 답변과 다른 답변의 차이점은 단지 임의적인 개인 취향일 뿐이며 다른 답변이 내가 이해하지 못하는 방식으로 우수할 수도 있습니다.