初めて質問します。よろしくお願いいたします。
エクセルで上から下へ繰り返しコピーをする際のマクロは、例えば以下のように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も見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
-
4
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
5
マクロ 最終列をコピーして最終列の次の列に挿入する
Visual Basic(VBA)
-
6
VBA 連続行データを5行ずつ隣の列に貼り付ける
Excel(エクセル)
-
7
エクセルVBAでコピーして順番に張り付けをしたい!
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルで一部除外した数字を...
-
エクセル マクロで列を連続し...
-
ビンゴ用抽選番号を作りたいのです
-
エクセルVBA Unionはなぜ遅い?
-
Excelで自動的に並べ替えなんて...
-
Excelで数値→文字列変換で指数...
-
テキストボックス内の文字のふ...
-
Excelで行ごとコピー、同じ行を...
-
エクセルでグラフタイトルが折...
-
Excelの関数について、特定の文...
-
塗りつぶしの色をコピーするには
-
たくさん作った同じ設定のグラ...
-
エクセル
-
日付が1年以内になると他のセル...
-
エクセルにおける、グラフの指...
-
C+vのvは英語で何の頭文字...
-
パワーポイントに貼り付けたエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルVBA Unionはなぜ遅い?
-
エクセルで一部除外した数字を...
-
エクセルの関数SUBSTITUTEを、...
-
エクセルで同じ名前ごとの合計...
-
EXCEL VBA 指定範囲内で特定の...
-
ExcelVBA:列方向の並び替え O...
-
EXCELである列を上から順にチェ...
-
エクセルで2列を検索し2列とも...
-
Excelで自動的に並べ替えなんて...
-
VBAでFormula関数を使ってVlook...
-
FIND関数について教えてください
-
エクセル マクロで列を連続し...
-
エクセル VLOOKUPが反映されない
-
エクセルvba 一つ上の行を指定...
-
エクセルで列内の同じIDの商品...
-
VLOOKUPで文字が反映さ...
-
(続き)Excel2013で正しくソート...
-
EXCELで数値の検索
おすすめ情報