
いつもお世話になっています。2点ばかりエクセルマクロについてご教示ください。
現在、私の職場では、集計表と日計表からなるブックを作成しており、日計表のシート名は1から31という名(半角)であり、順番に並んでいます。日計表に必要なデータを入力すれば、集計表に記載されている関数で、自動的に転記されるようになっています。月がかわるときに日計表の入力部分をマクロでクリアしています。しかし、消去のマクロの記述としては毎日の日計データシートを直接アクティブにして、毎月の変動箇所を消去するという不恰好なことをやっています。ソースは下記のとおりです。
Sheets("1").Select
Range("C5:F47").Select
Selection.ClearContents
Sheets("2").Select
Range("C5:F47").Select
Selection.ClearContents
~
Sheets("31").Select
Range("C5:F47").Select
Selection.ClearContents
シート名を変数にしてFor Next文などを使ってもっとスマートにできると思うのですが、いろいろ試行錯誤をやってみてもうまくいきません。ご教示いただければ幸いです。
もうひとつの質問は、日計シートには数字以外の場所を保護したいのですが、あらかじめ入力部分セルをロックしてシートを保護すると、ロックしている部分のみ消去を指定しているにもかかわらず「シートが保護されている」とでて、マクロが停止されてしまいます。この方法についてもご教示いただければ幸いです。
OSは windows7
エクセルは 2013です。
No.1ベストアンサー
- 回答日時:
こんにちは。
各シートの同じ範囲をクリアしたいということですよね?
方法はいろいろあると思いますが、以下一例です。
Sub Sample1()
Dim i As Integer
For i = 1 To 31
Worksheets(i).Range("C5:F47").ClearContents
Next i
End Sub
>あらかじめ入力部分セルをロックしてシートを保護すると、
>ロックしている部分のみ消去を指定しているにもかかわらず~~
え~と。ちょっと勘違いなさっているかも。
「ロックした」部分は、シートの保護をされた時にむやみに変更できなくなる部分ということです。
それなので、「ロックしている部分のみ消去」しようとすると警告が出るのは正しい応答だと思われます。
ついでですが、時にはロックした部分をマクロから操作可能にしたい場合がありますが、その場合は
Workbook.Protect や Worksheet.Protect
を利用して、保護を一旦解除してから必要な操作を行い、終了後に元に戻すという方法をとることで可能になります。
早速のご教示ありがとうございます。
なるほど、Worksheets(i)でいけたのですね。難しく考えすぎていました。
ご教示ありがとうございました。
また機会があればよろしくお願いします。
No.3
- 回答日時:
削除する範囲が決まっているなら、その範囲に名前をつけて、その範囲名で処理をしてはどうか。
そのほうがスマートな気がする。
マクロを使わなくても範囲名を指定することでDELキー一発で消せたりするし…。
ロックしたセルは保護対象なので、シートを保護すると削除やセルの変更はできなかった気がするんですけど。
マクロを使うときって関係なかったっけ?
No.2
- 回答日時:
ロックに関しては、状況がわかりかねるのですが、とりあえずの対策としては、マクロの最初と最後にProtectメソッドとUnprotectメソッドで制御するか、マクロの最初にprotectメソッドにUserInterfaceOnly:=trueを追加するといいかと思います。
for~next文ですが、次の様な感じにされるといいと思います。
dim i as integer
for i = 1 to 31
Sheets(i).Select
Range("C5:F47").Select
Selection.ClearContents
next
ただ、単純にデータを消すだけしたら、selectする必要もありませんので、以下の様にまとめることが可能です。
dim i as integer
for i = 1 to 31
Sheets(i).Range("C5:F47").ClearContents
next
あとは、Sheet(i)の上に、Sheets(i).protect UserInterfaceOnly:=trueを追加するれば、恐らく、入力はプロテクトされたままで、マクロが動くかと思います。
速のご教示ありがとうございます。
なるほど、sheets(i)でもいけたのですね。難しく考えすぎていました。
ご教示ありがとうございました。
また機会があればよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) エクセルで最下行にデータを追加するVBA 6 2023/05/09 09:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excel マクロコードを教えてい...
-
マクロがコードに記録されない
-
Excelマクロについて
-
エクセル(こんな関数ってあり...
-
Excelで数字を入れたら対応する...
-
Excel VBAでのWorksheet_Change...
-
エクセルVBAで実行中画面を...
-
指定値をマクロで検索&シート移動
-
エクセル シート内の一番下のセ...
-
エクセル2003 並び替えとマクロ
-
エクセルで複数のシートのクリ...
-
excel定数の違いについて。xlAu...
-
excelのマクロが上手く動作しま...
-
VBAを覚えたいのですがさっ...
-
エクセルの在庫表をマクロで
-
エクセルマクロで31枚のシー...
-
Excelのシート上のShapeにイベ...
-
複数のエクセルファイルとシー...
-
【マクロ】実行時エラー '424':...
-
Excelで、あるセルの値に応じて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
マクロ1があります。 A1のセル...
-
エクセルで複数のシートのクリ...
-
Excelのシート上のShapeにイベ...
-
Excelで数字を入れたら対応する...
-
【エクセル】フリーワード検索...
-
エクセルで特定の行だけ行削除...
-
エクセルファイルを開いた回数...
-
エクセル シート内の一番下のセ...
-
EXCELのダイアログシートって、...
-
長い時間かかるマクロが実行中...
-
【エクセル】「実行時エラー’10...
-
指定値をマクロで検索&シート移動
-
エクセル:セル内の文字列の最...
-
excel定数の違いについて。xlAu...
-
Excelにて、同じ画像を複数のセ...
-
Excelマクロでブック全体を検索...
-
エクセルでマクロを作りすぎた...
-
エクセルVBAで実行中画面を...
-
シートではなくBOOK間で重複し...
おすすめ情報