- ベストアンサー
特定曜日の特定セルの書式設定方法について
- 特定の曜日に特定のセルを書式設定する方法について教えてください。月間予定表の作成中で、毎週金曜日と日曜日に特定のセルを図のように書式設定する必要があります。セルの中には「第〇会議室 ・ 時間」という文字列を入力し、セルを結合して中央に配置し、背景をグレーにするようにしたいです。
- ExcelのマクロやVBAを使用して月を切り替えると日付や曜日が更新され、条件付き書式で色を付けることはできました。しかし、特定のセルの書式設定についてはうまく実装できませんでした。テキストボックスにマクロを登録し、ボタンをクリックすると処理が実行されるような形式にしたいです。金曜日と日曜日のボタンを用意し、それぞれの書式設定ができるようにしたいです。
- 同様の処理が必要なシートが複数あり、困っています。皆さんの助けが必要です。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) dim r as integer dim d as date if application.intersect(target, range("A1,D1")) is nothing then exit sub if range("A1") = "" or range("D1") = "" then exit sub range("B3:O33").unmerge range("B3:O33").clearcontents range("B3:O33").wraptext = true range("B3:O33").horizontalalignment = xlcenter range("B3:O33").interior.colorindex = xlnone application.enableevents = false for r = 3 to 33 d = dateserial(range("A1"), range("D1"), r - 2) if month(d) = range("D1") then select case format(d, "aaa") case "金" range(cells(r, "J"), cells(r, "O")).merge cells(r, "J") = "第一会議室" & vblf & "13:00~16:00" cells(r, "J").interior.color = xlgray25 case "日" range(cells(r, "B"), cells(r, "O")).merge cells(r, "B") = "第二会議室" & vblf & "9:00~16:00" cells(r, "B").interior.color = xlgray25 case else end select end if next r application.enableevents = true end sub ファイルメニューから終了してエクセルに戻る A1、D1をてきとーに書き換えると自動で動作する。 #塗色については好みに応じて修正してください。 #オマケ A3セルには =IF(MONTH(DATE($A$1,$D$1,ROW(A1)))=$D$1,DATE($A$1,$D$1,ROW(A1)),"") と記入、セルの書式設定のユーザー定義で d(aaa)と設定 31日のセルまでコピー貼り付ける
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! たびたびごめんなさい。 前回のコードで間違いが2ヶ所ありました。 >If WorksheetFunction.Weekday(Cells(i, "A")) = 1 Then を >If WorksheetFunction.Weekday(Cells(i, "A")) = 6 Then に >ElseIf WorksheetFunction.Weekday(Cells(i, "A")) = 5 Then を >ElseIf WorksheetFunction.Weekday(Cells(i, "A")) = 1 Then に 訂正してください。 曜日と列範囲が違っていました。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! >テキストボックスにマクロを登録してボタンを設置し、押した時に・・・ とありますので、テキストボックスを挿入 → 上下左右の小さな矢印になるところで右クリック → マクロの登録 → 編集 → VBE画面に↓のコードをコピー&ペーストしてみてください。 Sub テキストボックス1_Click() Dim i As Long i = Cells(Rows.Count, "A").End(xlUp).Row With Range(Cells(3, "B"), Cells(i, "O")) .ClearContents .UnMerge .Interior.ColorIndex = xlNone End With For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row If WorksheetFunction.Weekday(Cells(i, "A")) = 1 Then With Range(Cells(i, "J"), Cells(i, "O")) .Merge .Interior.ColorIndex = 15 '←グレイ25% .Value = "第一会議室" & vbCrLf & "13:00~16:00" .HorizontalAlignment = xlCenter End With ElseIf WorksheetFunction.Weekday(Cells(i, "A")) = 5 Then With Range(Cells(i, "B"), Cells(i, "O")) .Merge .Interior.ColorIndex = 15 .Value = "第二会議室" & vbCrLf & "9:00~16:00" .HorizontalAlignment = xlCenter End With End If Next i End Sub 1行目の >Sub テキストボックス1_Click() と最終行の >End Sub は表示されますのでその間に2行目以降をコピー&ペーストします。 ※ 各行は2行分表示されるだけの高さが十分あるものとします。 こんな感じではどうでしょうか?m(_ _)m