데이터의 순서를 유지해야 합니다. 설명하려면 셀에서 데이터를 이동해야 합니다.
a1 ~ b1,
a2 ~ c1,
a3 ~ d1,
a4 ~ e1,
a5 ~ f1,
a6 ~ g1,
a7 ~ h1,
a8 ~ i1,
a9 ~ B2
a10 ~ C2
a11 ~ D2
a12 ~ E2
a13 ~ F2
a14 ~ G2
a15 ~ H2
a16 ~ I2
A열의 24,000개 항목을 모두 검토할 때까지 헹구고 반복합니다.
확실히 매크로나 VBA를 통해 이 작업을 수행하는 쉬운 방법이 있습니까? 아마도 최신 버전의 기능이 이미 이 기능을 수행했을 수도 있습니다.
답변1
VBA 솔루션은 다음과 같습니다.
Option Explicit
Private Sub ReArrangeCells()
Dim ws As Worksheet, LastRow As Long
Set ws = Excel.ActiveSheet
LastRow = Range("A65536").End(xlUp).Row
Dim i As Long, j As Long, FromCell As Range, ToCell As Range, sNewCol As String, sNewRow As String
For i = 1 To LastRow
Set FromCell = ws.Range("A" & i) 'the cell we want to move
sNewCol = IIf(i Mod 8 = 0, Chr$(72), Chr$((i Mod 8) + 64))
sNewRow = IIf(i Mod 8 = 0, (i \ 8), (i \ 8) + 1)
Set ToCell = ws.Range(sNewCol & sNewRow) 'the cell we want to copy the data to
FromCell.Copy ToCell
If i <> 1 Then FromCell.Clear
If i Mod 100 = 0 Then DoEvents
Next i
End Sub
답변2
여기에 해결책이 있습니다. 다음을 가정합니다.
- 모든 원본 데이터는 A 열에 있습니다.
- B 열에는 행의 인덱스만 포함됩니다.
공식: =INDIRECT(CONCATENATE("a",$B2*8 + col_offset))
여기서 col_offset은 열 번호(인덱스 0)입니다. 따라서 첫 번째 열에서는 가 되고 =INDIRECT(CONCATENATE("a",$B2*8))
8번째 열에서는 가 됩니다 =INDIRECT(CONCATENATE("a",$B2*8+7))
.
상황을 더 명확하게 하기 위한 그림:
편집하다:새로운 수식: =INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))
및는 행과 열 오프셋입니다 -2
. -3
데이터를 표시하려는 모든 셀에 이것을 붙여넣기만 하면 됩니다. (이제 B열을 삭제할 수 있으므로 이 솔루션이 더 좋습니다)
답변3
VBA 답변은 대량의 데이터를 처리하는 데 가장 적합하지만 "전치"를 사용하여 복사/붙여넣기를 통해서도 이 작업을 수행할 수 있다는 점을 지적하겠습니다. 소규모 요구 사항에 맞는 간편한 마우스 오른쪽 버튼 클릭 솔루션입니다. 이것은 확실히 2010년에도 적용되며 2007년에도 마찬가지라고 생각합니다.
아직 이미지도 안되는 것 같군요..
- 셀을 세로로 복사하세요.
- 다른 셀을 마우스 오른쪽 버튼으로 클릭하고 "붙여넣기 옵션" 아래의 네 번째 옵션을 사용합니다(직각으로 두 개의 파란색 직사각형처럼 보임).
어떤 상황에서는 더 빠릅니다.