- ベストアンサー
VBAで範囲を有するセルの記載位置を入れ替える
お世話になります。 あるデータを扱うため、sheet_1に以下のような表を作成し管理を行っております。 sheetは複数存在するので、敢えてsheet_1とします。 (sheet_1) B列ーC列ーD列ーF列ーG列ーH列ーI列ーJ列ーK列ーL列・・・ 3行 A A A A B B B B C C 4行 A A A A B B B B C C 5行 A A A A B B B B C C 6行 A A A A B B B B C C 7行 F F F F G G G G H H 8行 F F F F G G G G H H 9行 F F F F G G G G H H 10行 F F F F G G G G H H 11行 K K K K L L L L M M 12行 以下、上記のように続く 4列毎×4行毎の16セル分の範囲を1情報として扱っているのですが、VBAを利用して記入された横方向の情報を下部行(例えば150行目)で縦に置き換える方法をご教授いただきたく投稿致しました。 変換元の対象範囲はB3:BM126です。 (sheet_1) B列ーC列ーD列ーF列ーG列ーH列ーI列ーJ列ーK列ーL列・・・ 150行 A A A A F F F F K K 151行 A A A A F F F F K K 152行 A A A A F F F F K K 153行 A A A A F F F F K K 154行 B B B B G G G G L L 155行 B B B B G G G G L L 156行 B B B B G G G G L L 157行 B B B B G G G G L L 158行 C C C C H H H H M M 159行 以下、上記のように続く 同一sheet内ではなく、新たにsheetを作成して同じ結果を求める方法でも構いませんので、恐れ入りますがご教授宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
横から失礼。 >Private Sub CommandButton1_Click() という記述から推測すると、シート上にCommandButtonを配してシートモジュールに書いたコードを実行していますね? かつ、そのシートはSheet1ではないという事では。 シートモジュールでRangeの親を省略すると、そのモジュールが書かれているシートのRangeになります。 Sheet2のシートモジュールならSheet2.Range("B3:BM126")になります。 Sheet1.Select のあとに Range("B3:BM126").Select としてしまうと、Sheet2がアクティブではないのでエラーになります。 仮に Range("B3:BM126").Copy としても、Sheet2.Range("B3:BM126")が対象になるので、目的の範囲ではないかもしれません。 Rangeの親Objectからきちんと指定してあげましょう。 Private Sub CommandButton1_Click() With Sheet1 .Range("B3:BM126").Copy .Range("B150").PasteSpecial Paste:=xlPasteAll, _ Transpose:=True 'コピー後Sheet1を表示させたいなら Application.Goto .Range("B150") End With Application.CutCopyMode = False End Sub 複数のシートで処理したいなら標準モジュールにコードを置いて、 『Sheet1』ではなくActiveSheetに対して処理するように変更すれば良いでしょう。
その他の回答 (2)
- hige_082
- ベストアンサー率50% (379/747)
これでうまく行かないでしょうか? Private Sub CommandButton1_Click() Sheet1.Select Range("B3:BM126").Copy ActiveWindow.SmallScroll Down:=120 Range("B150").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True End Sub
- nattocurry
- ベストアンサー率31% (587/1853)
範囲をコピーして、「形式を選択して貼り付け」で「行列を入れ替える」にすればよいです。
補足
nattocurry様 お世話になります。 早速試してみました。 動作は問題なく要望どおり行えました。 しかし、この動作をマクロの記録でコードを入手し、コマンドボタンを配して動作させると、デバッグになります。(矢印のコードが黄色くなります) Private Sub CommandButton1_Click() Sheet1.Select Range("B3:BM126").Select ← ココです。 Selection.Copy ActiveWindow.SmallScroll Down:=120 Range("B150").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("A1").Select End Sub どの様な修正でクリアできるかご教授願います。
お礼
end-u 様 ご回答いただきましたコードにて望んだ動作が得られました。 コードの意味をもっと勉強する必要があるものと痛感致しました。 ありがとうございました。