데이터 순서를 유지해야합니다. 설명하기 위해 셀에서 데이터를 이동해야합니다.
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
답변
해결책은 다음과 같습니다. 다음을 가정합니다.
- 모든 원본 데이터는 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 열을 삭제할 수 있기 때문에 더 좋습니다)
답변
VBA 답변은 많은 양의 데이터를 처리하는 데 가장 적합하지만 “Transpose”를 사용하여 복사 / 붙여 넣기를 통해이 작업을 수행 할 수도 있습니다. 작은 요구 사항을위한 간편한 마우스 오른쪽 클릭 솔루션입니다. 이것은 확실히 2010에 적용되며 2007도 믿습니다.
아직 이미지를 만들 수없는 것 같습니다 ..
- 셀을 세로로 복사
- 다른 셀을 마우스 오른쪽 버튼으로 클릭하고 “붙여 넣기 옵션”아래의 네 번째 옵션을 사용하십시오 (직각에서 두 개의 파란색 사각형 모양)
어떤 상황에서는 더 빠릅니다.