데이터를 특정 순서로 유지하면서 Excel 데이터를 1 열에서 8 열로 나누는 방법은 무엇입니까? 셀에서 데이터를 이동해야합니다. a1

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

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 열의 24000 개 항목을 모두 통과 할 때까지 헹구고 반복하십시오.

매크로 나 vba를 통해이를 쉽게 수행 할 수있는 방법이 있습니까? 아마도 가장 최신 버전의 기능이 이미이 작업을 수행했을 수도 있습니다.



답변

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

답변

해결책은 다음과 같습니다. 다음을 가정합니다.

  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 열을 삭제할 수 있기 때문에 더 좋습니다)


답변

VBA 답변은 많은 양의 데이터를 처리하는 데 가장 적합하지만 “Transpose”를 사용하여 복사 / 붙여 넣기를 통해이 작업을 수행 할 수도 있습니다. 작은 요구 사항을위한 간편한 마우스 오른쪽 클릭 솔루션입니다. 이것은 확실히 2010에 적용되며 2007도 믿습니다.

아직 이미지를 만들 수없는 것 같습니다 ..

  • 셀을 세로로 복사
  • 다른 셀을 마우스 오른쪽 버튼으로 클릭하고 “붙여 넣기 옵션”아래의 네 번째 옵션을 사용하십시오 (직각에서 두 개의 파란색 사각형 모양)

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