プロが教える店舗&オフィスのセキュリティ対策術

エクセルのVBAで、横方向に並ぶセルをコピーし、縦方向に張り付けるにはどうしたら良いのでしょうか?


1 2 3 4 5 6

この状態で並んでいるセル(A1:F1)をコピーして、













この様に(A1:A6)貼り付けたいのです。

よろしくお願い致します。

A 回答 (7件)

VBAって書いてありましたね。



単純にこれじゃまずいんですかね?
Dim intIndex As Integer

For intIndex = 1 To 100
'前がRow、後ろがCol
'列、行のカウントは1から始まる
Sheet1.Cells(intIndex, 1).Value = Sheet1.Cells(1, intIndex).Value
Next intIndex

100に当たる部分をコピーしたい最終セルのカウントにすれば全部処理できると思うのですが。
この記述だと列のデータを行に入れるようになります。
CellsのintIndexと1をそれぞれ入れ替えれば行のデータを列に入れることが出来ます。
また、Sheet1はそれぞれActiveSheetにすればどのシートにも対応できるような気がします。←動かしてないのでわからない。
    • good
    • 2

たとえば


Sub テスト()
Range(Worksheets("データ").Cells(i, 5), Worksheets("データ").Cells(i,35)).Copy
End Sub

こんな感じだと同じ1004エラー
先に
i=0
と指定しても同じく1004エラー

i=3
と指定して実行するとエラーが無く動作します。
(これって普通なんですよね)
エラー発生時にi=3ってことは
1回目と2回目のループ時にはエラーが出ていなかったのですよね?

謎だ!!

この回答への補足

ご回答ありがとうございます。

不思議な事に、Worksheets("データ")を外すとエラーが出なくなりました。

しかし、またしても問題が...。


今度はシートの切り替えが上手く行かなくなってしまいました。

質問が最初の物とそれてきてしまったので、一度別トピで上記の現象について質問を出してみます。

補足日時:2009/01/30 23:19
    • good
    • 0

Range(Worksheets("データ").Cells(i, 5), Worksheets("データ").Cells(i,35)).Copy



iって何かの変数ですか?
エラーになっている時のiの値はいくつになっていますか?
0とかになっていませんか?
    • good
    • 0
この回答へのお礼

たびたびすいません。

iはFor-Nextでループさせている変数で、エラー時の数値は3が入っています。

お礼日時:2009/01/30 16:11

Sub 並び替え()


Range("B1:F1").Copy
Range("A2").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
コードで書くとこんな感じ
    • good
    • 0
この回答へのお礼

ありがとうございます。

試してみようと思ったのですが、先ほども書きましたがその前のCopyの部分で躓いてしまいました。

行を変化させる為にCellsを使ったのですが、なぜかエラーが出てしまいます。

お礼日時:2009/01/30 16:00

マクロの記録で実際のコピー貼り付けを行ってみればわかるかと思いますが、コピー元と貼り付け先が重複しているとエラーになります。


今回の場合はA1セルが重複しています。

コピーする範囲をB1:F1とし貼り付け先をA2セルに指定する必要があります。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。

実際の作業の際には、その点に注意して作成致します。

お礼日時:2009/01/30 15:48

No.1さんのやり方をマクロで記録して見てみればわかると思います。


Range("D3:F3").Select
Selection.Copy
Range("D5").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone,SkipBlanks:=False, Transpose:=True
TransposeというのをTrueにして張り付ける処理をすればいいようです。参考までに。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

教えて頂いた方法を試そうと思い、プログラムを走らせてみようと思ったのですが、そこにたどり着く前の部分でエラーが出てしまいました。

大元の横並びのデータをコピーしようと思ったのですが、

Range(Worksheets("データ").Cells(i, 5), Worksheets("データ").Cells(i,35)).Copy


上記の部分で実行時エラー1004が出てしまいます。

他にトピを立てて質問を出した方がよろしいでしょうか?

お礼日時:2009/01/30 15:39

範囲をコピー



貼り付けを開始したいセルを選択

右クリックで「形式を選択して貼り付ける」を選択

「行列を入れ替える」にチェックして「OK」

Excelのバージョンがわかりませんが2000ならこの方法で可能でした。
    • good
    • 0
この回答へのお礼

ありがとうございます。

エクセルの操作での方法はわかります。

今回はVBAによる方法が知りたかったので、ご質問させて頂きました。

お礼日時:2009/01/30 15:35

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