• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:該当の曜日に色を塗るマクロの作成方法2(VBA))

該当の曜日に色を塗るマクロの作成方法2(VBA)

このQ&Aのポイント
  • VBA初心者でも該当の曜日に色を塗るマクロを作成する方法を教えてください。
  • 具体的なセル番地と使用する関数について教えていただけませんか?
  • 質問への回答をお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 前回回答したおっさんです。 画像をアップしておきます。 余計なお世話かもしれませんが・・・ >年と月と日は、べた打ちで数値を入力・・・ とありますが、↓の画像で 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

babycomecome
質問者

お礼

tom04様 まさかまた見つけてくださるとは・・・感動して泣きそうになりました(笑) まずは、理解力・応用力が足らず、ごめんなさい。 そして、ありがとうございます! 多くの方が命令文を教えてくださり、そのどれも実行できましたが、tom04様の命令文を元にだいぶ悩んだり、勉強したりしたので、馴染み深さがあったことと、再度見つけてくださったというお礼からベストアンサーにさせていただきます。 お礼ばかり重複いたしますが、本当にありがとうございました!

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

まず先にワークシートの改良から。 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

babycomecome
質問者

お礼

keithin様 ご回答ありがとうございました! ワークシートの改良部分、いただきました!!!見慣れた関数ばかりだったので、安心して使えます。ベストアンサーが付けれず心苦しいばかりです>< 本当にありがとうございました!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 投稿後に気づいたのですが、画像ではA2・A3セルに入力していますが、 数式そのものはA3・A4セルに入力した場合の数式ですので 画像のA列配置は気にしないでください。 (画像を変更するのを忘れていました) 何度も失礼しました。m(_ _)m

babycomecome
質問者

お礼

tom04様 何度も気にかけてくださって、ありがとうございます! 画像に関しては、すぐ理解できたので大丈夫ですよ~ありがとうございました!

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

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などで)比べるとお分かりいただけると思います。

babycomecome
質問者

お礼

tsubuyuki様 ご回答ありがとうございました! できました!命令文ってちょっとずつ理解できると楽しいですね。 わからなかったところに手が届く思いです。 初心者の私には『喜び』が原動力で、tsubuyukiさんにいっぱいヒントやらなんやらをいただきました。本当にありがとうございました!

関連するQ&A

専門家に質問してみよう