• ベストアンサー
※ 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/7940)
回答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

  • 該当の曜日に色を塗るマクロの作成方法

    お世話になります。 マクロの作成方法を教えてください。 ≪使用PC≫ windows XP Excel2003 ある『ボタン』を作成したいと思っております。 『月曜日』というボタンを押すと、日付と月曜日のセルに色を塗る。 『火曜日』というボタンを押すと、日付と火曜日のセルに色を塗る。 『水曜日』・・・・・ というボタンは作成可能でしょうか。 【例】 年は(セルA1) 月は(セルA2) 日は(セルA3~セルAE3) 曜日は(セルA4~セルAE4) 年と月と日は、べた打ちで数値を入力しています。 曜日は月と日から関数を入力し、自動で出ています。 IF(A$3="","",DATEVALUE($A$1&"/"&$A$2&"/"&A$3)) 条件付書式ではなく、ボタンを作りたいです。 他に記載の不備がありましたら、申し訳ございません。 よろしくお願いいたします。

  • Excelで曜日を出力する方法

    セルA1に3/19と入力すると、3月19日と表示されますよね。 で、セルA1に日付を入力したら、 B1に「日曜日」と表示させる方法がありましたら、教えてください。 Weekday関数を使うと、数字で曜日が、表示されるところまではわかるんですが。 この数字で表示されたものを、「日曜日」といったように、 日本語で表示することは無理でしょうか? IF関数と組み合わせようとしたら、やっぱり、また、1900年におめにかかってしまって(-_-;) ユーザー定義でaaaaで、日曜日と表示させるのも知っているんですが、 式を組み合わせるとむちゃくちゃになってしまって。 よろしくお願いいたします。

  • マクロ・VBAでの書類作成

    業務進捗書類作成で困っております。 再度お助けいただけないでしょうか。 〈内容〉 (1)セル I10の週頭(月曜日)の年月を変更したら自動的にその後の週頭(月曜日)が自動的に変更される。 (2) (1)を実行すると月によって隔週(月曜日)の数が違うため、結合されている年月末報告と月度合計が月によってズレてしまう為、月の週頭の数に合わせて結合する。 (3) (1)を実行すると月度合計のMAX範囲も月によってズレてしまう為、月の隔週(月曜日)の数に合わせて計算範囲が変更される。 (4)セル I9などの末報告の年月のみが自動的に変更されるマクロの作成。 〈追記〉 ・画像には表が全部入らない為、列がA~U(19年6月末報告~19年8月末報告)からBI~BZ(20年6月末報告~20年9月末報告)に飛んでおりますが、V~BH(19年9月末報告~20年5月末報告)の表が続いております。 ・表の範囲はセルB9からセルBZ34となっております。 ・末報告の年月は16カ月分です。 ・別の表で作成して頂いたコードを一応貼り付けておきますので宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sdate As Date, wdate As Date Dim c As Integer Dim i As Integer, j As Integer Dim buf As String If Target.Address <> "$C$3" Then Exit Sub Application.EnableEvents = False '結合、計算式クリア Range("C2:Q2,D3:Q3,C4:Q11").Value = "" Range("C2:Q2,C5:Q5,C7:Q7,C9:Q9,C11:Q11").UnMerge Range("B2:Q11").Borders.LineStyle = False sdate = Target.Value i = 1 c = 3 Do wdate = sdate + i * 7 '月が替わたら結合と計算式 If Month(Cells(3, c)) <> Month(wdate) Then Cells(2, c).Value = Format(wdate - 7, "yy年m月") & "末報告" With Range(Cells(2, c), Cells(2, 3 + i - 1)) .Merge .HorizontalAlignment = xlCenter End With For j = 5 To 11 Step 2 '"=MAX(C4:F4)" buf = "=MAX(" & Chr(64 + c) & j - 1 & ":" & Chr(64 + c + i - 1) & j - 1 & ")" Cells(j, c).Formula = buf With Range(Cells(j, c), Cells(j, 3 + i - 1)) .Merge .HorizontalAlignment = xlCenter End With Next j If wdate >= DateSerial(Year(sdate), Month(sdate) + 3, 1) Then Exit Do c = 3 + i End If Cells(3, i + 3) = wdate Cells(3, i + 3).NumberFormatLocal = "m月d日" i = i + 1 Loop '罫線 Range(Cells(2, 2), Cells(11, Cells(3, Columns.Count).End(xlToLeft).Column)).Borders.LineStyle = True Application.EnableEvents = True End Sub

  • EXCEL関数である曜日のときに、特定の数字を返す方法

    EXCEL関数でわからない点があり質問です。 EXCELにて、ある特定の曜日のときに、 特定の数字を返す、という関数を入れようとしているのですが、 なぜかうまくいきません。 まず、B列に入った日付から曜日番号を返す関数をA列に入れて =WEEKDAY(B4,1) としています。 その次に、A列のセルが1か2か7の時に、K列の数字を返す、 という関数を入力しました。 =IF(OR(A4="1",A4="2",A4="7"),K4,"") 関数的には間違いがないように思うのですが、 どうも、A4="1"といった関数がうまく動いていないようです。 たとえそれが1であっても、TRUEを返してくれません。 WEEKDAYの番号は数字とは違うのでしょうか? どなたか、お分かりになる方、 教えてください!

  • EXCELマクロでの曜日の表示

    はじめまして。 EXCELマクロで曜日を表示させたいのですが、方法がわかりません。 A1セルに年、A2セルに月、A3~AE3に日付(1~31) が入力されている状態で、A4~AE4に曜日(日・月・・・土)を表示 させたいのですが、どのようにすればよいでしょうか? あまり文章を書くのが得意ではないので、わかりにくいかもしれませんが、宜しく御願いします

  • Excel VBA 初心者です。 作成中のマクロわからないところ

    VBA初心者です。もしセルA1の値がAでセルB1の値がGでセルC1の値にJを含むなら、 セルD1の値を変数i に入れる。 上記を10行目まで繰り返す。 というマクロを作りたいのですが、行き詰ってます。 よろしくお願いします。

  • vba 曜日のデータ

    どなたか教えて頂ければ幸いです。 以下のようなコードがあります。これは、1~31迄の日付シートに あらかじめ用意されている日~土までの曜日シートの内容を 自動的にコピーしようとしているものです。 日付シートのB5には weekday()関数とユーザー定義の書式のaaaにより 日曜日なら「日」、月曜日なら「月」が入っています。 ですが、下の「<------」の箇所は、エラーではありませんが、 一致確認がなされていません。weekday()関数の戻り値を文字列と して見ていないのでしょうか? Sub test() Dim ws As Worksheet Dim i As Integer For Each ws In Worksheets  For i = 1 To 31   If ws.Name = CStr(i) Then   ws.Select    If ws.Range("B5") = "日" Then      <-----     Worksheets("日").Range("A1:D3") _       .Copy Destination:=ws.Range("A7")       ws.Tab.ColorIndex = 45    ElseIf ws.Range("B5") = "月" Then    <-----     Worksheets("月").Range("A1:D3") _     .Copy Destination:=ws.Range("A7")     ws.Tab.ColorIndex = xlNone

  • VBAマクロの記述を教えてください m(__)m 娘から聞かれたのですが主婦の私にはわかりません

    VBAマクロの宿題です。どうもエクセルのことのようですが、それ以上は私にはわからず困っています。    A   B   C   D   E  1  ○  ×  ○  ×  ○ 2  5  5 3 12 12 4  8  8 5 15 15 6 31 31 7  4  4 8  3  3 9 87 87 10  18  18 11 183 87 以上がエクセルのシートだと見てください。 準備:A1セルからE1セルに○あるいは×を入力する。    A2セルからE10のセルに適当な2桁の数値を入力する。 問題:1行目が○なら11行目に2行目から10行目までの    合計を計算・表示する。    1行目が×なら11行目に2行目から10行目までの    最大値を表示する。 ヒント:文字のIF文      プログラム上で文字を扱う場合、ダブル・クォーテー      ションで文字をはさむ。      IF Cells( 、 )="○" Then     プログラムの流れ |     For |       IF |         For |         Next |       Else |         For |         Next |       END IF |     Next 以上です。もう何が何やらちんぷんかんぷんです。どなたか助けてください。

  • エクセルVBA(マクロ)の書き方で・・・

    VBA初心者です。よろしくお願いします。 エクセルマクロで、次のような関数を入力して、 =IF(月!$D4=稼動シート!$B$2,月!B4,"◆") 自動記録をさせると コードは、次のような「絶対参照セル」(←表現あっていますか?)の表示になります。 『Range("C4").Select ActiveCell.FormulaR1C1 = "=IF(月!RC4=稼動シート!R2C2,月!RC[-1],""◆"")"』 わたしのスキルでは、この記述コードを参考に別のコードを書こうにも理解と応用が効きません。 そこで、VBAコードにも 『Range("C4").Select  =IF(月!$D4=稼動シート!$B$2,月!B4,"◆")』 と単純に書いてはいけないのでしょうか?また、どうすれば実際のシートで入力した関数と同じような表現でVBAにもかけるのでしょうか? ご指導お願いいたします。

  • Excel VBAで日付を曜日に変換したい。

    Excel VBAで日付を曜日に変換したい。 A1セル:2010/6/2 を B1セル:水 とするには、Excel VBA ではどうすればいいのでしょうか?

専門家に質問してみよう