dポイントプレゼントキャンペーン実施中!

貼り付けの時の行と列の並び替えでは出来ませんでした。


A A A A A
B B B B B
C C C C C
D D D D D
Z Z Z Z Z

このように5行5列でデータが並んでいる時に


A
B
C
D
Z



A
B
C
D
Z

と並べ換えたいのです。
列ごとの塊が縦に一列に並ぶようにしたいです。
実際はデータの量が膨大で手作業では出来ません。
どうぞよろしくお願いいたします。

質問者からの補足コメント

  • マクロでも良いですが、自分では書き換え出来ないのでそのまま使えるようにか、詳しい説明をつけていただけると嬉しいです。

    範囲の指定は多分なんでも大丈夫です。
    膨大といっても9行600列なので。

      補足日時:2016/11/22 02:02
  • ①でお願いいたします!
    今回やりたい作業は範囲が変わらない予定です。

      補足日時:2016/11/22 02:28

A 回答 (6件)

>実際はデータの量が膨大で手作業では出来ません。


それでも手動で置き換えることは可能。
キーボードショートカットを覚えよう。

キーボードの矢印キーとShiftキー、Ctrlキーの組み合わせで
簡単に犯意を選択したり、範囲を移動したりすることができる。

自分なら…
元のデータに対して左の縦1列を除いて右側の範囲を選択し、
それを左の縦1列のデータの下へ移動させる。

・・・その手順・・・
データがA1セルからE5セルまで入力されているとする。

A1セルを選択する。

左縦1列を除くため、「→」キーを押してB1セルを選択する。
ShiftキーとCtrlキーを押しながら矢印キーの「↓」を押し、さらにShiftキーとCtrlキーを押しながら矢印キーの「→」を推す。
これでB1セルからE5セルまでが選択される。
【切り取り】を行う。(Ctrl+X)
「←」キーを押しA列のセルを選択し、Ctrlキーを押しながら矢印キーの「↓」を推す。さらにもう一度「↓」だけを押す。
これでA列の最後のデータの下のセル(A6セル)が選択される。
【貼り付け】を行う。(Enterキーを押す)

A6セルからD10セルが選択されているので
左縦1列を除くため、「→」キーを押してB6セルを選択する。
ShiftキーとCtrlキーを押しながら矢印キーの「↓」を押し、さらにShiftキーとCtrlキーを押しながら矢印キーの「→」を推す。
これでB6セルからD10セルまでが選択される。
【切り取り】を行う。(Ctrl+X)
「←」キーを押しA列のセルを選択し、Ctrlキーを押しながら矢印キーの「↓」を推す。さらにもう一度「↓」だけを押す。
これでA列の最後のデータの下のセル(A11セル)が選択される。
【貼り付け】を行う。(Enterキーを押す)

…以下繰り返し…
(1000列あろうが、10000列あろうが繰り返し…ちょっと無茶?)

このようにキー操作だけで何とかなったりするものです。


・・・
ポイント。
Shiftキーと矢印キーを同時に押すと、選択範囲を矢印の方向へ拡張する。
Ctrlキーと矢印キーを同時に押すと、矢印方向に同じ入力状態の最後のセルまで選択を移動する。(入力されていれば入力の最後。入力が無ければ空白の最後まで移動)
ShiftキーとCtrlキーと矢印キーを同時に押すと、矢印方向に同じ入力状態の最後のセルまで選択状態を拡張する。
…こんだけ。
VBAでも同じだけのメモリを消費すると思われるので、都度書き換えるよりも楽なはず。

正直、同じキー操作の繰り返しなのでマクロ化したほうが楽には違いない。
    • good
    • 1
この回答へのお礼

こんなショートカットキーがあるなんて知りませんでした。
とても便利ですね。
マクロだけでなくショートカットも勉強しようと思います。
この方法を2回やってマクロに登録したら(当たり前かもしれませんが)
全く同じだったので少し書き加えて、完全にマクロ化しました。

Sub yokotate()

For i = 1 To 599
ActiveCell.Offset(0, 1).Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Cut
ActiveCell.Offset(0, -1).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
End Sub

すごくうまくできました!
本当にありがとうございます!

お礼日時:2016/11/23 13:36

こんなのはいかがでしょう。


5行5列(A1:E5)でデータが並んでいるとします。
A6セルに次の数式を設定して、下にオートフィルしてください。

=OFFSET($A$1,MOD(ROW(A5),5),ROW(A5)/5)

A列を選択してコピー、同じ位置に値張り付けして、数式を実値にします。
B列以降を削除すれば出来上がりです。

関数を使っているので、A1:E5中に空白があるとゼロと表示されます。
もし、それが嫌なら、=IF(A1="","",A1)みたいな式に、前述の数式を当てはめて対応してください。
    • good
    • 1
この回答へのお礼

ありがとうございます!
やってみたらこの方法でもできました!

お礼日時:2016/11/23 13:29

No.3 の補足



列番号(A~の記号ではなくて、1~始まる数字)に慣れていれば、もちろんあんなゴチャゴチャしなくてもよいです。
    • good
    • 0

こんな感じではいかがでしょうか?


----------------------------------------------------------------
Sub Sample()
Dim 始 As String
Dim 終 As String
Dim 行 As Long
Dim 列 As Long
Dim 始行 As Long
Dim 終行 As Long
Dim 始列 As Long
Dim 終列 As Long
Dim 先行 As Long
Dim 先列 As Long
始 = "C2"
終 = "AB9"
始行 = Range(始).Row
始列 = Range(始).Column + 1
終行 = Range(終).Row
終列 = Range(終).Column
先行 = Range(始).Row + 1
先列 = Range(始).Column
For 行 = 始行 To 終行
For 列 = 始列 To 終列
Cells(先行, 先列).Value = Cells(行, 列).Value
Cells(行, 列).ClearContents
先行 = 先行 + 1
Next
Next
End Sub
----------------------------------------------------------------
※ 範囲指定ですが「始 = "C2"」と「終 = "AB9"」を、それぞれ元範囲の右上のセルと左下のセルに変えてください。
    • good
    • 1
この回答へのお礼

丁寧に答えてくださってありがとうございます。
これではなぜか上手くできませんでした…。

A
A
A
A
A
B
B
B



Z
Z
Z

こんな風になってしまいました…。

お礼日時:2016/11/23 13:45

範囲が毎回同じならば良いのですがそうではないですよね


範囲をどのように指定したいか?とは
たとえば
①「A1」~「WB9」を「A1」~「A5400」ように、A1セルから固定してしまうのか?
② 選択している部分を、縦一列にするのか?
③ コピーで取り込んでいるものを、選択しているところから縦一列に貼付するのか?
という事です。
    • good
    • 0

マクロ(VBA)を使っても良ければ簡単に出来ます。


その場合は範囲をどのように指定したいか?によって違いますのでもっと具体的に説明してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!