데이터를 특정 순서로 유지하면서 Excel 데이터를 1개 열에서 8개 열로 분할하려면 어떻게 해야 합니까?

데이터를 특정 순서로 유지하면서 Excel 데이터를 1개 열에서 8개 열로 분할하려면 어떻게 해야 합니까?

데이터의 순서를 유지해야 합니다. 설명하려면 셀에서 데이터를 이동해야 합니다.

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

여기에 해결책이 있습니다. 다음을 가정합니다.

  1. 모든 원본 데이터는 A 열에 있습니다.
  2. 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년에도 마찬가지라고 생각합니다.

아직 이미지도 안되는 것 같군요..

  • 셀을 세로로 복사하세요.
  • 다른 셀을 마우스 오른쪽 버튼으로 클릭하고 "붙여넣기 옵션" 아래의 네 번째 옵션을 사용합니다(직각으로 두 개의 파란색 직사각형처럼 보임).

어떤 상황에서는 더 빠릅니다.

관련 정보