- ベストアンサー
該当の曜日に色を塗るマクロの作成方法2(VBA)
- VBA初心者でも該当の曜日に色を塗るマクロを作成する方法を教えてください。
- 具体的なセル番地と使用する関数について教えていただけませんか?
- 質問への回答をお待ちしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 前回回答したおっさんです。 画像をアップしておきます。 余計なお世話かもしれませんが・・・ >年と月と日は、べた打ちで数値を入力・・・ とありますが、↓の画像で D6セル(セルの書式設定 → 表示形式 → ユーザー定義から d としておきます)に =IF(OR(COUNTBLANK($A3:$A4),MONTH(DATE($A3,$A4,COLUMN(A1)))<>$A4),"",DATE($A3,$A4,COLUMN(A1))) D7セル(セルの表示形式はユーザー定義から aaa としておきます)に =IF(D6="","",D6) という数式を入れ、D6・D7を範囲指定 → D7セルのフィルハンドルでAH列までオートフィルでコピーしておきます。 これでA3・A4データを入れるだけでちゃんと日付・曜日が表示できると思います。 当然、大の月・小の月にも対応できます。 さて、本題ですが、 Sub monday_sample() Dim j As Long Range(Cells(6, "D"), Cells(7, "AH")).Interior.ColorIndex = xlNone '↑ Range(Cells(6, 4), Cells(7, 34)).Interior.ColorIndex = xlNone 'としても同様の結果になります。 For j = 4 To 34 '←D列~AH列までの列番号 If Cells(7, j) <> "" Then If WorksheetFunction.Weekday(Cells(7, j)) = 2 Then Range(Cells(6, j), Cells(7, j)).Interior.ColorIndex = 6 End If End If Next j End Sub こんな感じではどうでしょうか?m(_ _)m
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
まず先にワークシートの改良から。 D6に =IF($A$4=MONTH(DATE($A$3,$A$4,COLUMN(A6))),DATE($A$3,$A$4,COLUMN(A6)),"") と記入、セルの書式設定の表示形式のユーザー定義で d と設定してAH6までコピー D7に =TEXT(D6,"aaa;;;") と記入してAH7までコピー 月曜日マクロ: sub macro1() dim h as range range("D6:AH7").interior.colorindex = xlnone ’所定の「日付の」セル範囲について for each h in range("D6:AH6") ’月曜日なら色を塗る if h.offset(1).value = "月" then ’他の曜日なら"火","水"に修正 h.resize(2, 1).interior.colorindex = 6 end if next end sub
お礼
keithin様 ご回答ありがとうございました! ワークシートの改良部分、いただきました!!!見慣れた関数ばかりだったので、安心して使えます。ベストアンサーが付けれず心苦しいばかりです>< 本当にありがとうございました!
- tom04
- ベストアンサー率49% (2537/5117)
No.2です! たびたびごめんなさい。 投稿後に気づいたのですが、画像ではA2・A3セルに入力していますが、 数式そのものはA3・A4セルに入力した場合の数式ですので 画像のA列配置は気にしないでください。 (画像を変更するのを忘れていました) 何度も失礼しました。m(_ _)m
お礼
tom04様 何度も気にかけてくださって、ありがとうございます! 画像に関しては、すぐ理解できたので大丈夫ですよ~ありがとうございました!
- tsubuyuki
- ベストアンサー率45% (699/1545)
Sub monday_sample() Dim j As Long Rows("6:7").Interior.ColorIndex = xlNone For j = 1 To 31 If Cells(6, j + 3) <> "" Then If WorksheetFunction.Weekday(Cells(6, j + 3)) = 2 Then Range(Cells(6, j + 3), Cells(7, j + 3)).Interior.ColorIndex = 6 End If End If Next j End Sub 詳細は省略しますが・・・一つだけヒント。 Cells(行,列) で、セル番地(何行目の何列目)を指定します。 行・列には数字が入ります。式も可です。 Cells(3 , 4) ⇒ 3行目の4列目(D列) ⇒ D3セル 逆もしかりです。 E6セル ⇒ 6行目のE列(5列目) ⇒ Cells(6 , 5) こう書きます。 命令文にはそれぞれ意味があります。 「できた!」と喜ぶだけではなく、 1行ごとの意味もちゃんと押さえてくださいませ。 もう一つ、私なら7行目の「曜日」は IF(D$6="","",DATE($A$3,$A$4,D$6)) とします。大差はありませんが、 (あり得ない日、9/31などで)比べるとお分かりいただけると思います。
お礼
tsubuyuki様 ご回答ありがとうございました! できました!命令文ってちょっとずつ理解できると楽しいですね。 わからなかったところに手が届く思いです。 初心者の私には『喜び』が原動力で、tsubuyukiさんにいっぱいヒントやらなんやらをいただきました。本当にありがとうございました!
お礼
tom04様 まさかまた見つけてくださるとは・・・感動して泣きそうになりました(笑) まずは、理解力・応用力が足らず、ごめんなさい。 そして、ありがとうございます! 多くの方が命令文を教えてくださり、そのどれも実行できましたが、tom04様の命令文を元にだいぶ悩んだり、勉強したりしたので、馴染み深さがあったことと、再度見つけてくださったというお礼からベストアンサーにさせていただきます。 お礼ばかり重複いたしますが、本当にありがとうございました!