답변:
모든 단계에 대해 언급 했으므로 매크로를 개인의 필요에 맞게 쉽게 조정할 수 있습니다.
데이터 열과 조옮김 후 원하는 열 수를 선택할 수 있습니다
Const strCol = "B" '## select the column with your data
Const iTrans = 4 '## select how many columns you want after transposing
Sub transposeColumn()
'## search the last row to know how many cells we have to iterate through
iLastrow = Range(strCol & ActiveSheet.Rows.Count).End(xlUp).Row
iCol = Range(strCol & 1).Column
'## begin to loop through the chosen column
'## Cause we delete cells on every loop, we need to divide the loop counter
'## And since the division result isn't an integer, we have to round up
For i = 1 To WorksheetFunction.RoundUp(iLastrow / iTrans, 0)
'## set the source and target range for easier access later
Set rngSrc = Range(Cells(i + 1, iCol), Cells(i + iTrans - 1, iCol))
Set rngTrg = Range(Cells(i, iCol + 1), Cells(i, iCol + iTrans - 1))
'## set the format of target range to text
rngTrg.NumberFormat = "@"
'## copy and paste the values, the trick is to use transpose
rngSrc.Copy
rngTrg.PasteSpecial Transpose:=True
'## delete all cells which we have just transposed
rngSrc.Delete shift:=xlUp
Next i
End Sub
awk 스크립트가 문제를 해결하는 데 도움이됩니다.
awk 스크립트의 첫 번째 for 루프는 최대 4의 배수로 숫자를 처리합니다. 두 번째 루프는 마지막 몇 개의 숫자를 인쇄합니다. 마지막 숫자 인 경우 후행 쉼표가 인쇄되지 않습니다.
awk '{
for (n=1; n < NF-4; n+=4)
printf("%s, %s, %s, %s\n", $n, $(n+1), $(n+2), $(n+3));
for (; n <= NF; n++)
if (n == NF)
print $n;
else
printf("%s, ", $n)
}' filename
다음은 워크 시트 함수 솔루션입니다. 귀하의 목록이있는 위치 A1:A40
:
=TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+COLUMN()-2),"0000000000")
이것은 필요한만큼 많은 행에 입력되고 C1
오른쪽으로 채워진 F1
다음 채워집니다 .
시트와 일치하도록 수식을 조정해야합니다.
예를 들어, 출력 행을 C2
대신 시작 하려면 INDEX
함수 의 두 번째 인수는 이어야합니다 (ROW()-2)*4+COLUMN()-2
.
출력 행을 D1
대신 시작 하려면 INDEX
함수 의 두 번째 인수는 이어야합니다 (ROW()-1)*4+COLUMN()-3
.
편집 :
방금 쉼표로 구분 된 출력을 원한다는 것을 알았습니다. CONCATENATE
배열 인수를 취할 수 없기 때문에 약간의 해킹 이지만 작동합니다. 다음 수식을 열에 채우십시오.
=CONCATENATE(TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+1),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+2),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+3),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+4),"0000000000"))
이것은 행 1에서 시작하는 출력에 따라 다릅니다. 예를 들어, 출력이 행 2에서 시작하는 경우 각 인스턴스를 ROW()-1
로 변경해야 합니다 ROW()-2
.