- ベストアンサー
エクセルのセルの並べ替え
お世話になります。エクセル2007を使用しているのですが、手動でコピペではかなり面倒なことになったので質問させていただきます。 A1からA100のセルに数値のデータが入っているとして、 A1~A100のデータを順に4つづつA1,A2,A3,A4、次は隣の列にいってB1,B2,B3,B4そしてまた次の列にいってC1,C2,C3,C4・・と 最終的に4行25列に並べ替えたいのですが、楽に並べ替える手法はあるでしょうか。 この作業を何回も繰り返さないといけないので、やり方がわかる方どうか教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
A1からA4はそのまま、ということでよろしいでしょうか? B1:=INDEX($A$1:$A$100,4*(COLUMN()-1)+ROW()) として、右方・下方にフィル⇒コピー⇒値のみ貼り付け でいかがでしょう? (Excel2003で挙動確認済) B1:=OFFSET($A$1,4*(COLUMN()-1)+ROW()-1,) としても同じです。
その他の回答 (2)
- mu2011
- ベストアンサー率38% (1910/4994)
次の方法は如何でしょか。 B1に次の数式を設定し、B4までコピー後、B1:B4を選択して、右方向に必要分コピーして下さい。 =INDIRECT("a"&4*(COLUMN()-1)+ROW())
お礼
回答有難うございます。 この方法でも実現できそうです。 有難うございました。
- ka_na_de
- ベストアンサー率56% (162/286)
VBAで作ってみました。 一例です。 意味不明であれば無視してください。 Sub test() Dim i As Long, c As Long, r As Long Dim Member As Long, LastRow As Long Dim Buf As Variant Member = 4 '分割する要素の数 LastRow = Cells(Rows.Count, "A").End(xlUp).Row If LastRow Mod Member <> 0 Then LastRow = (Int(LastRow / Member) + 1) * Member If LastRow > Columns.Count * Member Then Exit Sub Buf = Range("A1:A" & LastRow).Value i = 1 Application.ScreenUpdating = False Cells.Clear For c = 1 To LastRow / Member For r = 1 To Member Cells(r, c).Value = Buf(i, 1) i = i + 1 Next r Next c Application.ScreenUpdating = True End Sub
お礼
VBAですか。。 申し訳ないですが意味不明です^^; CとかC++ならそこそこ分かるんですが、 情けないですね
お礼
回答有難うございます。 B1:=INDEX($A$1:$A$100,4*(COLUMN()-1)+ROW())は何故かうまくいかなかったのですが、 B1:=OFFSET($A$1,4*(COLUMN()-1)+ROW()-1,) で実現できました。 本当に有難うございました。