
初めて質問します。よろしくお願いいたします。
エクセルで上から下へ繰り返しコピーをする際のマクロは、例えば以下のようにLoopを使ってできると思うのですが、
例)
Range ("A2:B92").select
Selection.Copy
GYOU1 = 93
Do Until GYOU1 = 2823
Range("A"+Format(GYOU1)).Select
ActiveSheet.Paste
GYOU1 = GYOU1 + 91
Loop
同じような連続の動作を横方向(列方向)に行うにはどういうマクロを組めばよいか教えてください。例えば、A2:A10 -> C2:C10 -> E2:E10のように2列間隔で横方向にコピーペーストしていくマクロです。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんなことでよろしいでしょうか?
Sub test()
Dim srcRange As Range, destRange As Range
Const columnOffset as Long = 2
Set srcRange = Range("a2:a10")
Set destRange = Range("c2")
Do Until destRange.Column > 100
srcRange.Copy destRange
Set destRange = destRange.Offset(, columnOffset)
Loop
End Sub
この回答への補足
ありがとうございました。
見まねでやっている者ですので、基礎知識が全くありません。申し訳ありませんが、以下、教えて頂けませんでしょうか。
Do Until destRange.Column > 100
このColumnはどういう役割をしているのでしょうか?また、ColumnをRowに替えると、下方向に進んでいくのでしょうか?
srcRange.Copy destRange
これはsrcRangeで捕らえたものをdestRangeにコピーするという意味ですよね?質問では述べませんでしたが、実際使おうとしているのはシートをまたいだコピーペーストです。シート1にあるものをコピーしてシート2にペーストしたいのですが。その場合はどうしたらいいのでしょうか。
No.4
- 回答日時:
もちろん繰り返しの命令で記述するのがセオリーだとは思いますが、こんな方法もあります。
手動での操作を考えてもらうとわかるのですが例えばA1:B3範囲をコピーして、A4:C15範囲を選択してペーストするとA4からに3回ペーストしたと同じになります。
最初のA2:B92範囲を縦へコピーする場合は以下でも記述できます。
Sub sample()
Range("A2:B92").Select
Selection.Copy
Range("A93:B2822").Select
ActiveSheet.Paste
End Sub
また、上記は以下でも記述できます。(2行目から92行目までの91行を30回ペーストする)
Sub sample2()
Range("A2:B92").Select
Selection.Copy
Range("A93").Resize(91 * 30, 2).Select
ActiveSheet.Paste
End Sub
質問に対する回答です。
横にコピーする場合も同じなのですが、1行おきの場合は少し違いますが、C列とE列位なら(もう少しあっても)以下で記述できます。
Sub sample3()
Range("A2:A10").Select
Selection.Copy
Range("C2:C10,E2:E10").Select
ActiveSheet.Paste
End Sub
ただしあまり多くなるとRange("範囲")の範囲の文字数の関係でエラーが出る場合があるけれど、その場合はunionを使います。
p.s.
range("A2")とかをcells(1,2)と記述する方法は計算的には楽なのですが、画面上のV25やAC25とかの列番号が大きくなった時には直観的に列番号が分かりにくかったりします。
画面変更があった場合やデバッグではrangeとoffsetやresizeでプログラムしておく方が変更しやすかったり直観的にどのセルか分かりやすかったりします。
なのでrangeとcellsはケースバイケースで使い分ければいいと思います。
ただOption Explicitと変数の宣言は絶対した方がいいと思います、個人的には。
No.3
- 回答日時:
こんばんは。
>Range("A"+Format(GYOU1)).Select
この感覚は良く分かります。別の言語を習ったことがあるのでしょうか。ただ、VB系では、数値は、自動キャストといって、そのまま、文字列に変化します。ところで、ExcelではVBAは、あまり、Do ~Loop を使わないです。理由は、作業が計数化できるからだと思います。
なるべく、変数の宣言はしてくださいね。
'---------------------------------
Sub Test1()
Dim r As Range
Dim i As Long
Set r = Range("A2:B92")
For i = 1 To 31
r.Copy Cells(i * 91 + 2, 1)
Next i
Set r = Nothing
End Sub
'-------------------------------
Sub Test2()
Dim r As Range
Dim i As Long
Set r = Range("A2:A10")
For i = 1 To 5
r.Copy Cells(2, i * 2 + 1)
Next i
Set r = Nothing
End Sub
No.2
- 回答日時:
何処かで、コード実例を見て、まねているのだろうが、
Range("A"+Format(GYOU1)).Select
は中途半端だ。
Cells(i,j)
のi,jを規則性を捉えて式化する方が、応用が広い。
ーー
Sub test01()
Dim sh1
Dim sh2
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
'--
d = sh1.Range("A65536").End(xlUp).Row
r = sh1.Range("IV1").End(xlToLeft).Column
'--
k = 1
l = 1
For i = 1 To d Step 3 '3行おき1、4、5、・・
For j = 1 To r Step 2 '2列おき1,3,5、・・
sh1.Range(sh1.Cells(i, j), sh1.Cells(i + 1, j)).Copy sh2.Cells(k, l)
l = l + 1
Next j
k = k + 3 '2行1ブロック+空白1行
l = 1
Next i
End Sub
上記は小生側で、テストしやすいよう91行目ごとを2行目ごととか
に変えてある。
結果は別シートSheet2に出している。
本当はテスト・実行データの無い回答者のことを慮ってそういう簡素化した実例を挙げるべきだといつも思う。
そのほか見やすいようにSheet2で1行空白列を入れているが不要ならk = k + 3 の3を変えてください。
よくコード読んで類推して、上記コードを質問者の場合に合わせて修正してください。
ーー
上記のコードは色々なコードのスキルが詰まっている。
2シートの扱い
最終行・最終列を捉えてForNextに持ち込み(DoUntilとどちらがよいかは好みなれど)
ForNextのの利用
Copyメソッドの引数利用
貼り付け先のコントロールの仕方。
など最小行数でを目指した。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/07/05 09:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Excel(エクセル) 【マクロ】プリントスクリーンした画像をエクセルに貼付して印刷したい 6 2022/11/30 20:11
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
-
4
マクロ 最終列をコピーして最終列の次の列に挿入する
Visual Basic(VBA)
-
5
一行おきに貼り付ける 可能でしょうか
Visual Basic(VBA)
-
6
エクセルVBAでコピーして順番に張り付けをしたい!
Visual Basic(VBA)
-
7
マクロを特定の複数シートで実行する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
エクセルvba 一つ上の行を指定...
-
エクセルで一部除外した数字を...
-
EXCEL 指定した曜日に番号を振...
-
桁数が混在する並び替えの方法
-
エクセルで列内の同じIDの商品...
-
エクセルで同じ名前ごとの合計...
-
エクセルマクロでA欄に値があ...
-
エクセル マクロで列を連続し...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルVBA Unionはなぜ遅い?
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
-
Excelの関数について、特定の文...
-
テキストボックス内の文字のふ...
-
たくさん作った同じ設定のグラ...
-
エクセルでグラフタイトルが折...
-
日付が1年以内になると他のセル...
-
エクセルにおける、グラフの指...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルVBA Unionはなぜ遅い?
-
エクセルで一部除外した数字を...
-
エクセルvba 一つ上の行を指定...
-
ExcelVBA:列方向の並び替え O...
-
エクセルの関数SUBSTITUTEを、...
-
エクセルで2列を検索し2列とも...
-
エクセル VLOOKUPが反映されない
-
エクセルで列内の同じIDの商品...
-
エクセル マクロで列を連続し...
-
Excelで自動的に並べ替えなんて...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルで同じ名前ごとの合計...
-
ビンゴ用抽選番号を作りたいのです
-
EXCEL 指定した曜日に番号を振...
-
VBAでFormula関数を使ってVlook...
-
エクセル 並び替え
-
エクセルマクロでA欄に値があ...
-
EXCELである列を上から順にチェ...
おすすめ情報