初めて質問します。よろしくお願いいたします。
エクセルで上から下へ繰り返しコピーをする際のマクロは、例えば以下のように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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
【お題】逆襲の桃太郎
【大喜利】桃太郎が1回鬼退治に失敗したところから始まる新作昔話「リベンジオブ桃太郎」にはこんなシーンがある
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
【お題】追い込まれた犯人が咄嗟に言った一言とは?
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
-
4
一行おきにコピーするマクロが知りたい
Excel(エクセル)
-
5
VBA 連続行データを5行ずつ隣の列に貼り付ける
Excel(エクセル)
-
6
エクセルVBAでコピーして順番に張り付けをしたい!
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
エクセルで2列を検索し2列とも...
-
桁数が混在する並び替えの方法
-
エクセルの関数SUBSTITUTEを、...
-
エクセルマクロでA欄に値があ...
-
ExcelVBA:列方向の並び替え O...
-
エクセル VLOOKUPが反映されない
-
エクセル マクロで列を連続し...
-
エクセルvba 一つ上の行を指定...
-
EXCEL VBA 指定範囲内で特定の...
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
-
エクセルにおける、グラフの指...
-
テキストボックス内の文字のふ...
-
Excelの関数について、特定の文...
-
エクセルでグラフタイトルが折...
-
日付が1年以内になると他のセル...
-
エクセル
-
たくさん作った同じ設定のグラ...
-
エクセルで同じ値が連続してい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルで一部除外した数字を...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルVBA Unionはなぜ遅い?
-
エクセルの関数SUBSTITUTEを、...
-
エクセルで同じ名前ごとの合計...
-
エクセルで列内の同じIDの商品...
-
EXCEL 指定した曜日に番号を振...
-
ExcelVBA:列方向の並び替え O...
-
Excelで自動的に並べ替えなんて...
-
エクセルvba 一つ上の行を指定...
-
エクセル マクロで列を連続し...
-
エクセルで2列を検索し2列とも...
-
ビンゴ用抽選番号を作りたいのです
-
VBAでFormula関数を使ってVlook...
-
【マクロ】列方向にオートフィ...
-
エクセル 並び替え
-
エクセルマクロでA欄に値があ...
-
オートフィルについて(急ぎ!)
おすすめ情報