プロが教える店舗&オフィスのセキュリティ対策術

〜〜マクロが組めません…〜〜

Excelでマクロを組みたいのですが、初心者で全然分かりません…
似ているコードを探して見ましたが見つからず困っています。
教えてくれる方居ませんか?

以下組みたいマクロの内容です。

①毎月1日に特定のセル(例:A1)を塗りつぶし
→②を完了するまで毎日続く

②特定のセル(例:B1)に文字(例:済)を入力したら①の塗りつぶし無効

③毎月末日に②に入力されている文字を消去

④ ①~③を毎月ループ

以上です。

教えて頂きたいです

gooドクター

A 回答 (5件)

こんばんは


処理するコードは難しいものでは無いと思います

一例:A1セル
セルに色を付ける
Range("A1").Interior.ColorIndex = 6
セルの色をクリアー
Range("A1").Interior.ColorIndex = 0
文字を消去
Range("A1").ClearContents
方法は色々ありますが、とりあえずこの3つです。

ただ、マクロは、いつどのような方法で実行するかで仕様が変わります。

>①毎月1日に特定のセル(例:A1)を塗りつぶし
例えば、ブックが開く時に実行する(トリガーとなる)
Workbook_Open() や  Auto_Open()などの場合、
PCのカレンダーで1日にブックを開いた時に実行するようにすると
1日が休日だったらどうするか?
1日に何度も対象のブックを開く場合は、どうするかなどを検討する必要があります。
取り敢えずボタンから実行した方が良いと思います。(誤作動確認を入れる)

例:ActiveXボタンをシートに作りコード表示で作成
Private Sub CommandButton1_Click()
Range("A1").Interior.ColorIndex = 6
End Sub

>②特定のセル(例:B1)に文字(例:済)を入力したら①の塗りつぶし無効
これは、トリガーとセルの範囲を考える必要があります。

例えば、実行トリガーをダブルクリックとした場合
(対象のシートモジュールに記)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
Target.Value = "済"
Target.Interior.ColorIndex = 0
Cancel = True
End Sub

>③毎月末日に②に入力されている文字を消去
これも①同様に月末の定義があいまいになる可能性があるので
ボタンからの実行か、月が替わった初めのブックを開く時に
③を実行して①を実行するようにすれば良いでしょう。

全体としては、セルを操作する範囲を決める必要があります。
勿論、範囲は増えても良いですが、不規則な場合は少し困りますね。

③と①を自動に行う例
月が替わった時のフラグとして 例えば(空きセル) AA1セルを使用して
(ThisWorkbookモジュールに記)
Private Sub Workbook_Open()
Application.EnableEvents = False
With Worksheets("Sheet1")
If .Range("AA1") <> "" Then
If .Range("AA1") <> Month(Date) Then
Dim Rc As Integer
Rc = MsgBox("月が替わりました更新を行いますか?", vbYesNo + vbQuestion, "確認")
If Rc = vbYes Then
.Range("A1").Interior.ColorIndex = 6
.Range("A1").ClearContents
.Range("AA1") = Month(Date)
Else
MsgBox "更新が必要です"
End If
End If
Else
.Range("AA1") = Month(Date)
End If
End With
Application.EnableEvents = True
End Sub

"Sheet1"は暫定、対象のシート名に変える必要があります。
AA1セルの値を変えて試してください。

#4様と重複もありますが、がっつり書きました。
参考になりますでしょうか、、、
    • good
    • 2
この回答へのお礼

ありがとうございます!!
参考になります!!
マクロ自体初心者で半分も理解出来ていないですけど、少しずつでも出来るようになりたいですね…

お礼日時:2021/08/24 23:38

こんばんは



すみませんが、直接の回答ではありません。

ざっと読んだだけですが・・・
①の処理と、③の処理を分ける必要はあるのでしょうか?
(ご質問文では実行日が異なっていますけれど…)

例えば、月初めの最初の立ち上げ時に③と①を同時に処理してもよさそうに感じます。
また、①、②の塗りつぶしの処理に関しては、マクロで行わずとも「条件付き書式」を設定しておけば済むように思います。
もしもそれでよいのなら、③の処理を(例えば月初めに1度だけ)行えば、①~④全体を実現できるような気がしますけれど・・・?

一方で、自動実行させようとすると、「休日などでエクセルを立ち上げない日がある」などのような実行のタイミングをどう考えるかという問題がありそうです。
これに関しては、すでに、No3様が指摘なさっていらっしゃいますけれど。

解決法の一つとしては「処理日時の記録を(非表示などの)専用シートに記録しておく」といったものが考えられます。
AutoOpenなどの処理で、「記録シートを見て、当月の処理が以前にまだ実行されていなければ処理を実行する」というようなロジックにしておけば、「毎月1日に」ではなく、「毎月一番最初に立ち上げた時に」という内容で実現できると思われます。
(「毎月1日に」という条件をその通りに記述すると、1日が休日だと実行されなくなりますし、1日に2回、3回‥立ち上げると、今度はそのたびに実行されるようになってしまいます。)
    • good
    • 1
この回答へのお礼

返信ありがとうございます!!
マクロはやっぱり難しいですね…
勝手に脳内でマクロは万能な魔法みたいなものって思ってましたけど、実際には難しいものですね
勉強になりました。

お礼日時:2021/08/24 23:41

こんばんは。

 No.2の者です。

スケジュールとか、何かのチェック表みたいなものでしょうか?

会社の休日とかは、どうなるのでしょうか?
(例) 8/27(金)、8/28(土)、8/29(日)、8/30(月) の場合、
 8/28(土)、8/29(日)は、一般的には、休みかと思います。
 8/30(月)に、土日の処理も一緒に行う?
それとも生産工場などで毎日稼働しているのでしょうか?

>③毎月1日に②の文字が消える
 → チェックした履歴を残しておく必要はないのでしょうか?
 9/1になったら、8月分をどこかに保存しておく必要性とか?

特に問題がなかったら、無視して下さい。
    • good
    • 1
この回答へのお礼

返信ありがとうございます!!

①顧客管理表のような形で使用しています。
毎月1日にお客様へ連絡するのですが、数が多いので忘れてしまう事がありました。



②基本的に水曜日が休みなので、休み明けに開いた時に休みの日の分も処理出来るようにしたいです。

③履歴は先月の何日にチェックしたというのが分かると嬉しいですが、難しいなら無くても構いません。

丁寧にお答え下さりありがとうございます!!

お礼日時:2021/08/24 20:03

こんばんは。



直接の回答ではありませんが、
>①毎月1日に特定のセル(例:A1)を塗りつぶし
>→②を完了するまで毎日続く 
 ①だと、月に1回だけの塗り潰しの様に見えますが。。。
 毎日、塗り潰しが続くという事でしょうか?

auto_open
date関数 日付の取得
色を塗る マクロの記録

先ずは、上記を検索して、組み立てては如何でしょうか?
    • good
    • 1
この回答へのお礼

返信ありがとうございます!!
表現の仕方が変でしたね…

確かに言われてみると、
① ②が入力されるまで毎日塗りつぶしがされている
②文字を入力する事で①が無効化される
③毎月1日に②の文字が消える

④ ①~③を毎月ループが正しい質問だと思います。

教えて頂いたものを検索してみようと思います。
ありがとうございます。

お礼日時:2021/08/24 19:39

バージョンは?


表計算なのでセル色に対するマクロは最近搭載されたはずです。

つかはじめはマクロを記録してみるものです。
    • good
    • 1
この回答へのお礼

返信ありがとうございます!!
バージョンは2019の16.0?です。

お礼日時:2021/08/24 19:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング