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.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)にコピーします。
この情報を記述するシート名は”管理”とします。
丁寧なご回答いただきありがとうございます。
このような方法もあるのですね。思いもよらない方法でした。
勉強させていただきます。
本当にありがとうございました。
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")
丁寧なご回答いただきありがとうございます。
おかげさまで、プログラムを短く書き直すことができ、先ほど無事、動作しました。
(もともとのプログラムと違って一瞬で処理され、かなり感動しました。。)
本当にありがとうございました。
もっと勉強してみたいと思いました。
お探しの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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
Excelマクロ 別シートへ連続コピペの方法
Excel(エクセル)
-
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
-
4
複数のセルをコピーし、別シートの任意のセルへペーストをするためのマクロ
Excel(エクセル)
-
5
VBA コピーして次の値まで貼り付けを繰り返す
Visual Basic(VBA)
-
6
マクロ 新しいシートにデータをコピペしてシートの名前を変更したい
Excel(エクセル)
-
7
エクセルVBA 別シートの複数のセルの値をコピーする方法
Excel(エクセル)
-
8
別のシートから値を取得するとき
Visual Basic(VBA)
-
9
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
10
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
11
一行おきにコピーするマクロが知りたい
Excel(エクセル)
-
12
VBAで特定の文字が入力されたセルを選択
Excel(エクセル)
-
13
複数のマクロボタンをまとめて一つのマクロボタンにするということ。
Excel(エクセル)
-
14
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
17
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
-
18
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
19
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
20
エクセルVBAで値の貼り付けができない
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Aというブックの1というシート...
-
Excelの「0」だけ非表示、小数...
-
エクセルで条件に一致したセル...
-
Rangeメソッドは失敗しました。...
-
日付が未入力の際はゼロか、空...
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
エクセルで1月0日と表示される!!
-
ExcelでTODAY関数を更新させな...
-
シートAで横に並んだ項目→シー...
-
シート参照で変数を使いたい(EX...
-
エクセルのセルに、マウスで選...
-
エクセルで、勤務表から 日付...
-
Excelシートの保護時にデータの...
-
エクセルのシート間で連続した...
-
(Excel)あるセルに文字を入力...
-
VBAで、セル(Range)のオブジ...
-
エクセルVBA テキストボックス
-
エクセルのルビがついたセルを...
-
エクセルの参照先が固定されて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報