• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelやAccessを使って実現したい)

ExcelやAccessを使ってデータを縦に並び替える方法

このQ&Aのポイント
  • ExcelやAccessを使って、データを横並びから縦並びに変更する方法について教えてください。
  • 具体的なデータの例として、セルA1~E3にデータが入っているとします。このデータを順番通りに縦並びのセルに格納したい方法を教えてください。
  • 大量のデータを特定のフォームに入力し、アクションを起こすことで縦に並ぶようにする方法についてもアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

このデータがSheet1にあるとして、別のシートのA1に、 =INDEX(Sheet1!$A$1:$E$3,INT((ROW()-1)/5)+1,MOD((ROW()-1),5)+1) と入力して下にコピペ。

xchoxcho
質問者

お礼

できました。 まさに、実現したいことの通りです。 今はとりあえず、上記式をコピペして代用しましたが、もう少し式の意味を理解します。 内容を確認させていただき、改めてコメントさせていただきます。 ありがとうございました。

xchoxcho
質問者

補足

補足ですみません。(お礼を選択することができませんでした) 確認しました。 INDEX関数を利用することは理解です。 ROW関数を利用することも理解です。 しかし、INDEX関数の行番号、列番号への指定の式の意味がいまいち理解できません。 やりたいことは実現できているので、まったく問題ありませんが、内容をきちんと理解したいと思っています。 お手数でなければ、解説をお願いしたいです。

その他の回答 (5)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

No4、No5です。コード中につかっていない 変数がありました。 Dim R1 As Long R1 = 1 の二つはコメントアウトするか削除しておいてください。

xchoxcho
質問者

お礼

補足するといいましたが、こちらにお礼します。 すばらしいです。できました。 この場合は、セルにどのような値が入っていても(列数が異なっていても)目的を果たせます。 動作もとても安定しています。 取り急ぎ、No.2さんの方法で問題を解決し、この方法で長く続く作業を効率化したいと思います。 皆様、本当にありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

No4です。フォームのボタンクリックのイベント で設定しました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

各行の列数は同じではない場合も含めて、 以下では? Private Sub CommandButton1_Click() Dim L1 As Long Dim R1 As Long Dim h As Long Dim i As Long Dim j As Long 'Sheet1の各列のセルの数ほどSheet1のA列をSheet2にコピペ L1 = 1 R1 = 1 h = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To h For j = 1 To (Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column) If Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column <> "" Then 'セルのデータのコピペ Worksheets("Sheet2").Cells(L1, 1).Value = Worksheets("Sheet1").Cells(i, j).Value L1 = L1 + 1 End If Next j Next i End Sub

xchoxcho
質問者

お礼

回答ありがとうございます。 列数が異なっていてもできる方法ですね?(実際は、列数は異なっていませんが) No.2さんのやり方と同様、とりあえず、中身を深く理解したいと思いますので、少し内容を理解する時間をください。 確認してみて、補足で追記させていただきます。ありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO1です。 >確かに有効な方法ですが、これだと、縦並びのセルに納めることができません。 >もう少し工夫が必要ですかね? >この場合、ポイントはE1までいったら、A2に飛ばすという部分だと思いますが何か良い方法はありますか?  ⇒因みに提案した操作を実行されましたか?   F1:F5を選択し、その選択範囲で下方向にコピーすれば「#A1~#E1→#A2~#E2→#A3~#E3」となり、#→=置換で並び替えされるはずです。

xchoxcho
質問者

お礼

追加のご回答ありがとうございました。 上記の方法を試しました。 やり方が悪いのかもしれませんが、縦のセルにデータを納めることができません。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 仮にF1~F5に#A1、#B1、#C1、#D1、#E1を入力→F1:F5を選択→下方向に15行分コピー→置換で#を=に全て置換

xchoxcho
質問者

お礼

さっそくの回答ありがとうございます。 確かに有効な方法ですが、これだと、縦並びのセルに納めることができません。 もう少し工夫が必要ですかね? この場合、ポイントはE1までいったら、A2に飛ばすという部分だと思いますが何か良い方法はありますか?

関連するQ&A