[[20200503095339]] 『VBAで複数の範囲をコピーしたい』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで複数の範囲をコピーしたい』(初心者)

今日の先ほどからVBA覚えようと取り組み始めたホヤホヤたまごです。

複数のセル範囲をコピーしたいのですが、

2つまでですと動作したのですが、
3つ以上を動作させようとするとエラーに
なってしまいます。

動作したもの
Range("A3:B35", "F3:F35").Copy

エラーになったもの
Range("A3:B35", "F3:F35", "I3:I35").Copy

解決方法をご教授ください。

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

< 使用 Excel:Office365、使用 OS:Windows10 >


 3つのセル範囲を選択する操作をマクロ記録すれば・・・。
(BJ) 2020/05/03(日) 10:03

 ついでにその状態でコピーも。
(BJ) 2020/05/03(日) 10:09

BJさん、ありがとです。

記録してみたところ

Range("A3:B35", "F3:F35", "I3:I35").Select
Selection.Copy

になりました。

3つ以上は.SelectからSelection.Copyというもので実行しないとダメって事で合ってますか?

それとも、そもそも2つの範囲で実行できた最初の文自体が間違いで.SelectからSelection.Copyの流れで書くのが正しいのでしょうか?

VBAいきなり難しく感じてきました・・・
(初心者) 2020/05/03(日) 10:17


 え〜と、
 本当にマクロ記録したら、そうなったんですか?
 私の知る範囲を超えているので、これ以上解りません。
(BJ) 2020/05/03(日) 10:34

Range("A3:B35,F3:F35,I3:I35").Select
となったのに、あなたが書き換えていませんか?

(γ) 2020/05/03(日) 10:50


Range("A3:B35,F3:F35,I3:I35").Select
Selection.Copy

です。

3つ以上の範囲はRange("A3:B35, F3:F35, I3:I35").Selectから改行してSelection.Copyと書かないとダメなのかと、3つ以上じゃなくてもそう書くのが正しいのかご教授下さい。
(初心者) 2020/05/03(日) 11:03


もちろんSelectは不要です。マクロ記録をそのまま使うことは殆どありません。
Range("A3:B35,F3:F35,I3:I35").Copy とします。

http://officetanaka.net/excel/vba/speed/s2.htm
を参考にして下さい。
(γ) 2020/05/03(日) 11:06


ありがとです。

ためになりました。
(初心者) 2020/05/03(日) 11:16


書いている間に話おわちゃいましたが、投稿しておきます。

>そう書くのが正しいのかご教授下さい。
正解はいくつもあるので、なんともいえませんが、動けばそれは"正解"でしょう。

【複数】の範囲を示すのに【1つ】の文字列で表す方法は有効です。
【1つ】の範囲を示すのに【2つ】の文字列で表す方法も有効です、

↓をステップ実行してご確認ください。

    Sub 実験1()
        Stop

        Range("B2:C2,C4:D4,B5,C6:D6").Select
        Range("B2", "D6").Select
        Range(Range("B3"), Range("D7")).Select
    End Sub

(もこな2 ) 2020/05/03(日) 11:21


また、γさんが示されているように、VBAの世界では基本的に、対象のブックやシート、セルなど(オブジェクトと言います)を明示すれば、いちいち選択したりアクティブにしたりする必要はありませんので、一般的には↓のように書きます。
    Sub 実験2()
        Stop

        '▼ひとつの範囲をコピー
        Range("B2", "D6").Copy
        Range(Range("B3"), Range("D7")).Copy

        '▼複数の範囲をコピー
        Range("B3:B6,D3:D6,F3:G6").Copy
        Range("B11:D11,B13:D14,B16:D16").Copy

        '▼行(列)数が一定でないのでコピーできない(エラーになる)
        Range("B2:C2,C4:D4,B5,C6:D6").Copy

    End Sub

ただし、複数の範囲をコピーするときに行(あるいは列)の数が一定でないと、コピーに失敗しますので注意が必要です。

(もこな2 ) 2020/05/03(日) 11:31


もこな2さん、ありがとうです。

より理解が深まりました。

昨日もあれから色々勉強してましたが、VBAは難しいですね・・・

頭から煙が出そうになりつつも休憩しながらやってます。

みなさんに教えて貰った事、忘れないように繰り返していきます。

(初心者) 2020/05/04(月) 05:38


>複数のセル範囲をコピー

>動作したもの
>Range("A3:B35", "F3:F35").Copy
とされていますが、これは単一の範囲(Range("A3:F35")とおなじ)です。

これで良いなら
Range("A3:B35,F3:F35,I3:I35").Copy は
Range("A3:I35").Copy (単一の範囲のコピー)でよいかもです。

(チオチモリン) 2020/05/04(月) 08:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.