データを特定の順序に保ちながら、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の24000のエントリをすべて調べるまで繰り返します

確かに、マクロまたは 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 は列番号 (ゼロ インデックス) です。したがって、最初の列では となり=INDIRECT(CONCATENATE("a",$B2*8))、8 番目の列では となります=INDIRECT(CONCATENATE("a",$B2*8+7))

よりわかりやすくするために写真を掲載します。

ここに画像の説明を入力してください

編集:新しい数式:と=INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))は行と列のオフセットです。データを表示したいすべてのセルにこれを貼り付けるだけです。(列 B を削除できるため、このソリューションの方が優れています)-2-3

答え3

VBA の回答は大量のデータを処理するのに最適ですが、「Transpose」を使用してコピー/貼り付けでこれを行うこともできることを指摘しておきます。これは、小さなニーズのための簡単な右クリック ソリューションです。これは 2010 に確実に適用され、2007 にも適用されると思います。

画像もまだできないようです。

  • セルを垂直にコピーする
  • 別のセルを右クリックし、「貼り付けオプション」の下の 4 番目のオプション (直角の 2 つの青い四角形のように見えます) を使用します。

状況によってはより速くなります。

関連情報