
Excelマクロ初心者です。どうぞよろしくお願いいたします。
2つのシート(入力・出力)を作り、片方のシートに入力した値を、もう片方のシートにコピーペーストするというマクロを記録で作ったのですが、これをもっと少し簡単にしてほしいと言われ、いろいろ本を読んだり調べている所なのです。
For、Nextという式を使ってみる方法があるのは分かったのですが、コピペするのが行方向から列方向に、、もしくはセルが一つ飛ばしだったりと規則性が微妙で、結局どうしたらよいのかわからないです。
以下が記録のマクロで作成したマクロです。省略してますが、この4倍くらいの行が続きます。
どのように直せばもっと単純なマクロになるか、わかる方、申し訳ないですがよろしくお願いいたします。
Range("C3").Select
Selection.Copy
Sheets("出力").Select
Range("D3").Select
ActiveSheet.Paste
Sheets("入力").Select
Range("G3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("出力").Select
Range("D13").Select
ActiveSheet.Paste
Sheets("入力").Select
Range("K3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("出力").Select
Range("D23").Select
ActiveSheet.Paste
Sheets("入力").Select
Range("A4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("出力").Select
Range("C5").Select
ActiveSheet.Paste
Sheets("入力").Select
Range("A5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("出力").Select
Range("E5").Select
ActiveSheet.Paste
Sheets("入力").Select
Range("A6").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("出力").Select
Range("G5").Select
ActiveSheet.Paste
Sheets("入力").Select
Range("A7").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("出力").Select
Range("I5").Select
ActiveSheet.Paste
Sheets("入力セル").Select
Range("A8").Select
Application.CutCopyMode = False
No.1ベストアンサー
- 回答日時:
「簡単にしてほしい」と言った人は、VBAができる人ですか?もし、できる人なら、あなたに課題を出して試しているような気がします。
何故なら、この課題はVBAでマクロを作るにあたって、一番最初に理解しなければならないものだと考えているからです(私的にですが…)。Sheets("入力").Select
Range("C3").Select
Selection.Copy
Sheets("出力").Select
Range("D3").Select
ActiveSheet.Paste
Sheets("入力").Select
上記のVBAを日本語にすると次のようになります。
入力シートを選択する
選択したシートのC3セルを選択する
選択したセルをコピーする
出力シートを選択する
選択したシートのD3セルを選択する
選択したセルに先ほどコピーしたセルをペーストする
上記の日本語を整理すると次のようになります。
入力シートのC3セルをコピーする
出力シートのD3セルにコピーしたセルをペーストする
これをVBAで書き直すと次のようになります。
Sheets("入力").Range("C3").Copy
Sheets("出力").Paste (Sheets("出力").Range("D3"))
さらに、Copyメソッドのヘルプを読むと次のような書き方ができることに気づくはずです。
Sheets("入力").Range("C3").Copy (Sheets("出力").Range("D3"))
転記するセルに規則性が無いとのことなので、For~Nextでの対応はあまり意味がないと思いますが、上記の記述の簡素化だけでもわかりやすいコードになると思います。
ちなみに、Copy~Pasteでは書式なども一緒にコピーできますが、もし、値だけの転記で良いのであれば、次のような書き方が最適です。
Sheets("出力").Range("D3") = Sheets("入力").Range("C3")
丁寧なご回答いただきありがとうございます。
おかげさまで、プログラムを短く書き直すことができ、先ほど無事、動作しました。
(もともとのプログラムと違って一瞬で処理され、かなり感動しました。。)
本当にありがとうございました。
もっと勉強してみたいと思いました。
No.3
- 回答日時:
入力シートから出力シートへ値のみ入れるとのであれば
With Sheets("出力")
.Range("D3").Value=Range("C3").Value
.Range("D13").Value=Range("G3").Value
.Range("D23").Value=Range("K3").Value
・・・・
End With
と云った書き方がシンプルでPCの負担も少ないです。
丁寧なご回答いただきありがとうございます。
おかげさまで、プログラムを短く書き直すことができました。
本当にありがとうございました。

No.2
- 回答日時:
不規則なセルのコピーなら、あなたが作成したマクロのように記述するしか方法はないでしょう。
1案として、別のシートにコピー元とコピー先のセルを記述しておき、その情報に従い、
コピーする方法が考えられますがいかがでしょうか。
添付の図の例では、
シート名(管理) に以下の情報を記入します。
A1にコピー元のシート名(=入力)
B1にコピー先のシート名(=出力)
A2にコピー元のセル名(C3)
B2にコピー元のセル名(D3)
A3にコピー元のセル名(G3)
B3にコピー元のセル名(D13)
・・・以下同様
マクロを実行するとA1に書かれたシート名(入力)の各セル(C3,G3,K3)を
B1に書かれたシート名(出力)の各セル(D3,D13,D23)にコピーします。
この情報を記述するシート名は”管理”とします。

丁寧なご回答いただきありがとうございます。
このような方法もあるのですね。思いもよらない方法でした。
勉強させていただきます。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Excel(エクセル) excelVBAについて。 8 2022/12/11 13:47
- Visual Basic(VBA) excelVBAについて。 1 2022/11/30 06:16
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
Excelマクロ 別シートへ連続コピペの方法
Excel(エクセル)
-
-
4
エクセルVBA 4行飛ばしで転記するループ処理
Excel(エクセル)
-
5
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
6
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
7
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
8
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
9
マクロで最終行を取得してコピーしたい
Visual Basic(VBA)
-
10
マクロ自動コピペ 貼り付ける場所が変わる場合
その他(Microsoft Office)
-
11
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
12
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
13
複数のセルをコピーし、別シートの任意のセルへペーストをするためのマクロ
Excel(エクセル)
-
14
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
15
エクセルvbaで、別シートの最下行にデータを取り込むコードを教えてください。
Visual Basic(VBA)
-
16
VBAの「for i=1 to cells(…」と「i=cells(…」の違いを教えてください。
Visual Basic(VBA)
-
17
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
18
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
19
Excelで一行おきに2行の空白行を挿入したい
その他(Microsoft Office)
-
20
VBA 条件が一致した場合のみコピーする
その他(ビジネス・キャリア)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iPhoneのExcelアプリで、別のシ...
-
EXCELのハイパーリンクのセルを...
-
Excelの「0」だけ非表示、小数...
-
マクロ 新しいシートにデータ...
-
エクセルで条件に一致したセル...
-
Excelシートの保護時にデータの...
-
エクセルで1月0日と表示される!!
-
Excelで複数シートの選択セルを...
-
エクセルで複写のように自動入...
-
日付が未入力の際はゼロか、空...
-
エクセルでシート保護をかける...
-
セルを決まった数だけずらして...
-
エクセルで20万行あるシート...
-
エクセルで、加筆修正したセル...
-
エクセル ハイパーリンクで画像...
-
EXCELマクロで、シート間でのコ...
-
excelでハイパーリンクになって...
-
別シートのセルを絶対参照にする
-
ExcelでTODAY関数を更新させな...
-
エクセルで別シートからの最大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
Excelシートの保護時にデータの...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
ExcelでTODAY関数を更新させな...
-
別シートのセルを絶対参照にする
-
Excelでスクロールすると文字が...
-
EXCELのハイパーリンクのセルを...
-
エクセルで20万行あるシート...
-
エクセルで、加筆修正したセル...
-
エクセル ハイパーリンクで画像...
-
Rangeメソッドは失敗しました。...
-
マクロ 新しいシートにデータ...
-
(Excel)あるセルに文字を入力...
-
エクセルで複写のように自動入...
-
EXCEL関数でシート名が変わる可...
-
エクセルで指定のセルのみ完全...
おすすめ情報