マクロを自分で組む知識がないので、マクロの記録で強引に
やりたい操作を実行できるようにしました。
シート2の4行目に空行を挿入してから、
シート1のA3~AK3を、シート2の4行目、シート3,4の3行目に値の貼付けをして、
シート1内の複数のセルを空白にする動作です。
出来上がったマクロを見ると130行以上あったので、
不要な部分や省略できる部分の削除を調べながらやってみますが、
どうしてもエラーが起きます。
エラーが起きても起きなくても、何が良くて何が悪いかわからないので、
初心者向きの正解を教えていただきたいです。
以下に一部省略した130行程を貼付けますのでお願いします!
Sub 登録完了ボタン()
'
' 登録完了ボタン Macro
'
'
Application.ScreenUpdating = False
Sheets("会員情報一覧").Select
Rows("4:4").Select
Selection.Insert Shift:=xlDown
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
↓2~33まで続く。
ActiveWindow.ScrollColumn = 32
ActiveWindow.ScrollColumn = 33
Range("AL5:DN5").Select
Selection.Copy
Range("AL4").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.ScrollColumn = 31
ActiveWindow.ScrollColumn = 30
↓31~1まで続く。
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A6").Select
Sheets("顧客情報入力").Select
Range("A3:AK3").Select
Selection.Copy
Sheets("会員情報一覧").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A4").Select
Sheets("個別情報(閲覧・印刷)").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B7").Select
Sheets("配布(メール送信・印刷)").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B9").Select
Sheets("顧客情報入力").Select
Application.CutCopyMode = False
Range("H6:I7").Select
Selection.ClearContents
ActiveWindow.SmallScroll Down:=9
Range("C18:C20").Select
Selection.ClearContents
ActiveWindow.SmallScroll Down:=6
Range("C24:D24").Select
Selection.ClearContents
Range("C26:F38").Select
Selection.ClearContents
ActiveWindow.SmallScroll Down:=9
Range("D39:F42").Select
Selection.ClearContents
Range("C39").Select
ActiveCell.FormulaR1C1 = "-"
Range("C40").Select
ActiveCell.FormulaR1C1 = "-"
Range("C41").Select
ActiveCell.FormulaR1C1 = "-"
Range("C42").Select
ActiveCell.FormulaR1C1 = "-"
Range("C43").Select
ActiveCell.FormulaR1C1 = "-"
Range("C44").Select
ActiveWindow.SmallScroll Down:=-36
Range("F14").Select
End Sub
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
回答者に丸投げする質問じゃないのに好感を感じましたので、またおせっかいさせていただきます。
補足にあった、c42:c46の範囲に"-"を書き込むマクロだと、
「c42:c46の範囲に"-"を書き込む」を5回繰り返しているだけなんです。
Range("c42:c46").FormulaR1C1 = "-"
だけで目的の処理はできちゃってて、無駄に5回繰り返してるのね。
もしForを使うとしたら
For i = 0 To 4
Range("c" & 42 + i) = "-"
Next i
こんな感じ。
For を1じゃなく0からにしてるのは、
41にi(1~5)を足すより、
範囲の最初のセルアドレスの数値42にi(0~4)を足したほうが、
式を理解しやすいと思ったから。
この辺はFor~Next間の処理内容や、好みもありますが。
こういう部分での個性(好み)が出るから、他人の作ったものに手を加えるのが面倒くさかったりします。(笑)
Range("F7").Selectは意図的なセル移動?
マクロ記録のゴミならな消すようにしていきましょう。
前の回答で敢えて書かなかった部分ですが…
複数範囲のクリア部分は、範囲をカンマで続けて書き並べ、一度に処理出来ます。
Range("H6:I7,C18:C20,C24:D24,C26:F38,D39:F42").ClearContents
質問にかかれていたもと、私の回答に書いたものの動作ではエラーはでませんでしたので、
エラーが出た時や、「もっとシンプルな書き方にできないか」と疑問を持たれた時に
再質問されると良いでしょう。
「質問&回答」じゃなく、個人レクチャーみたいになっちゃうので。
がんばってください!
再度の詳しい回答ありがとうございました!
私も補足に質問を上乗せするのが気になりましたが、
つい質問を締め切らずに期待していました。
とても分かりやすく、勉強になりました!
がんばります!ありがとうございました!
No.1
- 回答日時:
セルの移動操作もマクロに含まれているので、それは全部削除可能です。
質問だとシート1,2…と書いてますがシート名指定で良いのですよね?
いきなり、
Range("AL5:DN5")をコピーしてAL4に貼り付ける謎の操作が登場してますが…。
移動操作の記録はほぼ不要。
ActiveWindow.ScrollColumn = 3
コピペ後のセル選択も不要。
(だけど、選択セルがあちこちになっちゃってるのでA1セルを選択させてます)
Select直後のSelectionも省略可能。
「この範囲を選択」→「選択した範囲に処理」 という流れを、
「この範囲に処理」と直接処理するイメージ。
Range("C39").Select
ActiveCell.FormulaR1C1 = "-"
これも、
「C39セルを選択」→「アクティブセル(選択したセル)に"-"を書き込む」を
「C39セルに"-"を書き込む」と短縮しています。
『Application.ScreenUpdating = False』
を書くと、処理中の動作が画面に表示されないので、
動作検証の際は頭に「'」を付けてコメントアウトすると、
どこでまで処理が進んでいるかわかりやすいです。
(下記のマクロにでは「'」付けてます)
マクロの画面で。[F8]を押せば、1行ずつ実行してくれるので、
以上な挙動がわかりやすいです。
最初から[F8]で動作を見続けるのも大変なので、
疑わしい行で[F9]を押すとブレークポイントが設定されます。
マクロを実行すると、ブレークポイントで一度停止します。
そこから[F8]で1行ずつ追うのが良いでしょう。
・・・この辺の機能も利用しましょう。
で、整理してみたのがこちら。
--------
Sub 登録完了ボタン()
'Application.ScreenUpdating = False
Sheets("会員情報一覧").Select
'行挿入
Rows("4:4").Select
Selection.Insert Shift:=xlDown
'謎操作(コピペ操作)
Range("AL5:DN5").Copy
Range("AL4").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("顧客情報入力").Select
Range("A3:AK3").Copy
Sheets("会員情報一覧").Select
Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select '貼り付け後にA1を選択
Sheets("個別情報(閲覧・印刷)").Select
Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select '貼り付け後にA1を選択
Sheets("配布(メール送信・印刷)").Select
Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select '貼り付け後にA1を選択
'謎操作(セルクリア、「-」入力)
Sheets("顧客情報入力").Select
Application.CutCopyMode = False
Range("H6:I7").ClearContents
Range("C18:C20").ClearContents
Range("C24:D24").ClearContents
Range("C26:F38").ClearContents
Range("D39:F42").ClearContents
Range("C39") = "-"
Range("C40") = "-"
Range("C41") = "-"
Range("C42") = "-"
Range("C43") = "-"
Range("A1").Select '貼り付け後にA1を選択
End Sub
--------
最後の方の、複数セルに同じ処理をする部分もまとめられますが、
質問者様のスキルだと、このまま分けていた方が認識しやすと思い、
そのままにしています。
さて・・・
質問に情報無かったのですが、
どんなエラーが出てるの?
そこ大事。
取り敢えず、上に書いたようなマクロ検証操作をしながら、
エラー元を探ってみて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Visual Basic(VBA) excelVBAについて。 1 2022/11/30 06:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
マクロを実行すると画像がズレ...
-
セル背景や文字を点滅させる方法
-
【マクロ】ファイル名の変更に...
-
範囲指定をしてPDF保存vba
-
EXCELのセルや文字色の反映
-
excelで セルの移動時に...
-
クリックすると文章が表示され...
-
セルがクリックされた回数をカ...
-
太字に設定されているセルの個...
-
セルの値が変ると自動でマクロ...
-
フォントの色を指定して削除出...
-
エクセル 未入力セルがあると...
-
現在のセルの位置を返す関数は...
-
Excelで、図形内の文字をセルに...
-
小数点以下の文字だけ書式を変...
-
エクセル マクロ 相対パスか...
-
【EXCEL】先週の月曜日の日付を...
-
Excelで挿入した図をセルの中央...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
VBA 見つからなかった時の処理
-
エクセルでの検索ボックスの作...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
【EXCEL】先週の月曜日の日付を...
-
EXCELのセルや文字色の反映
-
セルがクリックされた回数をカ...
おすすめ情報
回答ありがとうございます!
素人目にも、 ActiveWindow.ScrollColumnの連続は省略できそうだと思い、
調べながら書き換えましたが、構文エラーやプロパティの使い方が不正です、
と出てしまいました。
基本的な構文の作り方がなっていないせいだと思い、正解を見ながら解釈したくなったので、
質問させていただきました。
二つの謎操作(コピペ操作)と(セルクリア、「-」入力)は、添付した図のとおりです。
見えますでしょうか?
ちょこちょこセルを選択しているのは、4行目くらいまで非表示にするため、
それ以下のセルを一応選択したためです。
教えていただいたやり方で、1行づつ理解しながら追ってみたいと思います。
時間がかかると思いますが、終わったら、また補足か御礼いたしますので、
よろしくお願いします!
おはようございます。
教えていただいたマクロと旧マクロを見比べながら、1行づつ解読しました。
表が変更になったので、それに合わせてマクロも変えましたが、
無事に実行できました!
”-”の繰り返し入力の省略もしてみようと思いやってみました。
Dim i
For i = 1 To 5
Range("c42:c46").FormulaR1C1 = "-"
Next i
Range("F7").Select
バッチリ正解はこれ!とは、自分ではわからないのですが、
これでもできました!チグハグですかね??(汗
正解を示していただき、とてもわかりやすく勉強できました!
ありがとうございました!