
いつもお世話になっております。
マクロ初心者です。
2つのシートで、【Sheet3】シートから【Aタイプ】シートへコピーします。
Sheet3→一覧表。Aタイプ→請求書となります。
№1~№45まで繰り返しコピー&ペーストします。
下記の通り№1と№2で作成しましたが、45回繰り返し作成する方法がわかりません。
おわかりの方、ご教示願います。
Worksheets("Sheet3").Range("F4").Copy ’№1
Worksheets("Aタイプ").Range("E9").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("G4").Copy Worksheets("Aタイプ").Range("A9:C9")
Worksheets("Sheet3").Range("D4").Copy
Worksheets("Aタイプ").Range("A11").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("U4").Copy
Worksheets("Aタイプ").Range("E19").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("K4").Copy
Worksheets("Aタイプ").Range("F20").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("L4").Copy
Worksheets("Aタイプ").Range("F21").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("M4").Copy
Worksheets("Aタイプ").Range("F22").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("N4").Copy
Worksheets("Aタイプ").Range("F23").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("Z4").Copy
Worksheets("Aタイプ").Range("E24").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AB4").Copy
Worksheets("Aタイプ").Range("E25").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AC4").Copy
Worksheets("Aタイプ").Range("G26").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("H4").Copy
Worksheets("Aタイプ").Range("F27").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AF4").Copy
Worksheets("Aタイプ").Range("G28").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("Q4").Copy
Worksheets("Aタイプ").Range("G29").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("R4").Copy
Worksheets("Aタイプ").Range("G30").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AH4").Copy
Worksheets("Aタイプ").Range("G31").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AI4").Copy
Worksheets("Aタイプ").Range("G32").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AK4").Copy
Worksheets("Aタイプ").Range("G33").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("AL4").Copy
Worksheets("Aタイプ").Range("G34").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("F5").Copy ’№2
Worksheets("Aタイプ").Range("E51").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("G5").Copy Worksheets("Aタイプ").Range("A51:C51")
Worksheets("Sheet3").Range("D5").Copy
Worksheets("Aタイプ").Range("A53").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("U5").Copy
Worksheets("Aタイプ").Range("E61").PasteSpecial Paste:=xlPasteValues

No.3ベストアンサー
- 回答日時:
>下記の部分は全コピーですが、この部分のみが動きません。
>Worksheets("Sheet3").Range("G4").Offset(fromRow).Copy Worksheets("Aタイプ").Range("A9:C9").Offset(toRow)
こちらの環境では正常に動作しています。
1回目(G4)と2日目(G5)ですが、添付のような結果になります。
これが、望んだ結果だと思いますが、いかがでしょうか。

すぐにご回答いただきありがとうございます。
セルの結合部分の為、動作しませんでした。
説明不足ですみませんでした。
数式の貼り付けで全て動作できました。
ご丁寧に教えて頂きありがとうございました。
No.4
- 回答日時:
こんばんは。
こういうのは、マクロ・オン・マクロという種類のものではないかと思います。
一旦、表計算上で、コピー元とペースト先を、きれいに整理するのです。
それで、私の場合は、それを整理するためのマクロ(現在は非公開)を作りましたので、マクロ・オン・マクロと呼んでいます。
#1さんご指摘にはあるのですが、どんなイレギュラーなものでも、一対一対応なら可能です。逆に1対1対応していないとエラーメッセージを出します。
バックアップを取ってから、試してみてください。
'//
Sub CopyValueMacro()
Dim cpyData As Variant
Dim pstData As Variant
Dim i As Long, j As Long
Dim shA As Worksheet
Dim sh3 As Worksheet
Set shA = Worksheets("Aタイプ")
Set sh3 = Worksheets("Sheet3")
cpyData = Split("F4,D4,U4,K4,L4,M4,N4,Z4,AB4,AC4,H4,AF4,Q4,R4,AH4,AI4,AK4,AL4", ",")
pstData = Split("E9,A11,E19,F20,F21,F22,F23,E24,E25,G26,F27,G28,G29,G30,G31,G32,G33,G34", ",")
If UBound(cpyData) <> UBound(pstData) Then
MsgBox "データの数が違います", vbCritical
Exit Sub
End If
For j = 0 To 44
sh3.Range("G4").Offset(j).Copy shA.Range("A9:C9").Offset(j * 42)
For i = 0 To UBound(cpyData)
shA.Range(pstData(i)).Offset(j * 42).Value = sh3.Range(cpyData(i)).Offset(j).Value
Next i
Next j
End Sub
こんばんは。
ご丁寧にデータ数のチェック方法までありがとうございました。
参考に使わせて頂いきます。
今回は色々とありがとうございました。
大変勉強になりました。

No.2
- 回答日時:
>コピーするセルは横列1行下がります。
ペーストするセルは横列42下がります。コピー元:F4の2回目はF5
ペースト:E9の2回目は、E51になれば良い訳ですね。
(列は変わらず、コピー元は1行が増分、コピー先は42行が増分)
以下のようにしてください。
Worksheets("Sheet3").Range("F4").Copy ’№1
Worksheets("Aタイプ").Range("E9").PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("G4").Copy Worksheets("Aタイプ").Range("A9:C9")
Worksheets("Sheet3").Range("D4").Copy
Worksheets("Aタイプ").Range("A11").PasteSpecial Paste:=xlPasteValues
を変える場合です。
Sub sample()
Dim i As Long
Dim fromRow As Long
Dim toRow As Long
For i = 1 To 45
fromRow = i - 1
toRow = (i - 1) * 42
Worksheets("Sheet3").Range("F4").Offset(fromRow).Copy '№1
Worksheets("Aタイプ").Range("E9").Offset(toRow).PasteSpecial Paste:=xlPasteValues
Worksheets("Sheet3").Range("G4").Offset(fromRow).Copy Worksheets("Aタイプ").Range("A9:C9").Offset(toRow)
Worksheets("Sheet3").Range("D4").Offset(fromRow).Copy
Worksheets("Aタイプ").Range("A11").Offset(toRow).PasteSpecial Paste:=xlPasteValues
Next
End Sub
同様にして他の箇所も変えてください。
コピー元は、.offset(fromRow) を追記
コピー先は、.offset(toRow) を 追記します。
早速のご教示、ありがとうございます。
下記の部分は全コピーですが、この部分のみが動きません。
Worksheets("Sheet3").Range("G4").Offset(fromRow).Copy Worksheets("Aタイプ").Range("A9:C9").Offset(toRow)
それ以外は動きました。

No.1
- 回答日時:
考えるのがめんどくさい&勘違いによる誤回答防止のために伺いますが、コピーするセルとペーストするセルのそれぞれの座標の位置関係に法則はありますか?
法則が無いなら繰り返し処理はできません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Listviewに表示された文字のコ...
-
Access VBAから使用したExcelプ...
-
バッチで当日日付で作成される...
-
マウントしたディスクにcpで、...
-
EXCEL VBA
-
テーブルのコピーについて
-
Eclipseのコード入力時の、行コ...
-
Ctrl + Cなど複数の入力キー...
-
一行おきに貼り付ける 可能でし...
-
DataTableに入っているデータを...
-
【UWSC】WEBページ内コピーした...
-
Excel: ファイル名になぜ、[...
-
svnでファイル移動すると履歴が...
-
「このファイルを開く前に常に...
-
FTPのgetとputの使いわけ。
-
TortoiseSVNでリポジトリURLの...
-
「セキュリティの警告 発行元...
-
パスワード付きmp3ファイルにつ...
-
Subversionのリビジョン番号一...
-
Macのpages資料(職務経歴書や志...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
マウントしたディスクにcpで、...
-
一行おきに貼り付ける 可能でし...
-
C++言語で、構造体のコピーは可...
-
Activesheet.Pasteで困っています
-
Eclipseのコード入力時の、行コ...
-
Ctrl + Cなど複数の入力キー...
-
DataTableに入っているデータを...
-
Listviewに表示された文字のコ...
-
jakarta poiを使用し、EXCELの...
-
文字列の切り出し
-
Eclipseでコピーするとき行数な...
-
コピーした文章が改行がされて...
-
他プロジェクトのFormを自プロ...
-
Excelでコピーしたセル(テキス...
-
プログラムについて。
-
【UWSC】WEBページ内コピーした...
-
バッチで当日日付で作成される...
-
ASP.net でコントロールをコピー
-
arduino unoからデータを読み出...
おすすめ情報
ご回答ありがとうございます。
説明不足ですみませんでした。
コピーするセルは横列1行下がります。ペーストするセルは横列42下がります。
よろしくお願いします。