
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
Excelマクロ 別シートへ連続コピペの方法
Excel(エクセル)
-
-
4
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
5
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
6
エクセルVBA 4行飛ばしで転記するループ処理
Excel(エクセル)
-
7
エクセルvbaで、別シートの最下行にデータを取り込むコードを教えてください。
Visual Basic(VBA)
-
8
マクロで最終行を取得してコピーしたい
Visual Basic(VBA)
-
9
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
10
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
11
マクロ自動コピペ 貼り付ける場所が変わる場合
その他(Microsoft Office)
-
12
複数のセルをコピーし、別シートの任意のセルへペーストをするためのマクロ
Excel(エクセル)
-
13
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
14
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
15
VBAでの結合セルのコピー&ペースト
Excel(エクセル)
-
16
VBA別シートの最終行の次行へ転記したい。
Visual Basic(VBA)
-
17
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
18
マクロ 新しいシートにデータをコピペしてシートの名前を変更したい
Excel(エクセル)
-
19
Excelで一行おきに2行の空白行を挿入したい
その他(Microsoft Office)
-
20
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Office2021のエクセルで米国株...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
Excelシートの保護時にデータの...
-
Excelで複数シートの選択セルを...
-
ExcelでTODAY関数を更新させな...
-
日付が未入力の際はゼロか、空...
-
EXCELのハイパーリンクのセルを...
-
複数シートの同じセル内容を1シ...
-
エクセル複数シート(1年)に1...
-
Excelでスクロールすると文字が...
-
エクセルで複数のシートの同じ...
-
ハイパーリンク で『指定された...
-
INDIRECT(空白や()がある文字列...
-
マクロ 新しいシートにデータ...
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
エクセルで別シートからの最大...
-
エクセルで複写のように自動入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Office2021のエクセルで米国株...
-
Excelの「0」だけ非表示、小数...
-
エクセルで条件に一致したセル...
-
Excelで複数シートの選択セルを...
-
エクセルについて
-
エクセルで1月0日と表示される!!
-
Excelシートの保護時にデータの...
-
日付が未入力の際はゼロか、空...
-
ExcelでTODAY関数を更新させな...
-
EXCELのハイパーリンクのセルを...
-
エクセルで、加筆修正したセル...
-
Excelでスクロールすると文字が...
-
複数シートの同じセル内容を1シ...
-
マクロ 新しいシートにデータ...
-
別シートのセルを絶対参照にする
-
ハイパーリンク で『指定された...
-
iPhoneのExcelアプリで、別のシ...
-
エクセルで複写のように自動入...
-
エクセルで指定のセルのみ完全...
-
エクセル ハイパーリンクで画像...
おすすめ情報