
初めて質問します。よろしくお願いいたします。
エクセルで上から下へ繰り返しコピーをする際のマクロは、例えば以下のように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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルで一部除外した数字を...
-
EXCELでマクロを用い日付をテキ...
-
Excelでの並べ替え
-
エクセルで合算後の降順がうま...
-
エクセルVBA Unionはなぜ遅い?
-
VLOOKUPで文字が反映さ...
-
データベースを検索するマクロ...
-
Excelで数値→文字列変換で指数...
-
Excelの関数について、特定の文...
-
テキストボックス内の文字のふ...
-
Excelで行ごとコピー、同じ行を...
-
エクセルにおける、グラフの指...
-
日付が1年以内になると他のセル...
-
たくさん作った同じ設定のグラ...
-
エクセルでグラフタイトルが折...
-
エクセル 入力中に表示されな...
-
【Excel】貼り付けた画像がいつ...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルで一部除外した数字を...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルの関数SUBSTITUTEを、...
-
エクセルVBA Unionはなぜ遅い?
-
エクセル マクロで列を連続し...
-
ExcelVBA:列方向の並び替え O...
-
エクセルで列内の同じIDの商品...
-
エクセルで同じ名前ごとの合計...
-
EXCEL 指定した曜日に番号を振...
-
エクセルvba 一つ上の行を指定...
-
VBAでFormula関数を使ってVlook...
-
エクセルの質問(結合と集計に...
-
エクセルで2列を検索し2列とも...
-
EXCELである列を上から順にチェ...
-
エクセル2003で住所録の抽出
-
Excel 複数キーワードの確認方法
-
エクセルマクロでA欄に値があ...
-
エクセルのVLOOKUP関数の応用
おすすめ情報