電子書籍の厳選無料作品が豊富!

お世話になります。
あるデータを扱うため、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を作成して同じ結果を求める方法でも構いませんので、恐れ入りますがご教授宜しくお願い致します。

A 回答 (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に対して処理するように変更すれば良いでしょう。
    • good
    • 0
この回答へのお礼

end-u 様

ご回答いただきましたコードにて望んだ動作が得られました。
コードの意味をもっと勉強する必要があるものと痛感致しました。

ありがとうございました。

お礼日時:2009/05/16 16:31

これでうまく行かないでしょうか?



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
    • good
    • 0

範囲をコピーして、「形式を選択して貼り付け」で「行列を入れ替える」にすればよいです。

この回答への補足

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

どの様な修正でクリアできるかご教授願います。

補足日時:2009/05/14 14:04
    • good
    • 0

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