[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『カレンダー 土日祝に塗りつぶし』(ヒロ)
1月
1 2 3 4 5
水 木 金 土 日
のカレンダーがあった時に土日祝の列にマクロで
塗りつぶしをしたい。教えてください。
全文検索とかで検索しましたがしましたがヒット
しませんでした。宜しくお願いします。
日付は表示形式で d
曜日は aaaになってます。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
さしあたって、完成してなくてよいので現状のコードを示した上で、
【エラーが発生する場合】 ××の箇所で、エラー番号○、エラーメッセージ○○が表示される。
【エラーにならないが想定した動作でない場合】 ○○になるはずが××になる
のように、具体的にわからない部分を説明できませんか?
(もこな2) 2023/02/02(木) 21:18:27
条件付き書式ではダメですか? (MK) 2023/02/02(木) 21:24:34
条件書式では、出来てます。ので
マクロお願いしたいです。
もなこ2 さんのご指摘は その通りと
思いますが、こちらとしては 赤ペン先生は
のぞんでません。コードを教えてくださる方
お願いします。
(ヒロ) 2023/02/02(木) 22:19:10
>最近はコ○ナラみたいな って、ここ? https://coconala.com/search (4耐) 2023/02/03(金) 00:33:12
日付はどのセル範囲に入力されていますか? 祝日はどのシートのどのセル範囲に入力されていますか?
(稲葉) 2023/02/03(金) 09:53:37
ネットで検索すると例えば
エクセルVBAでカレンダーシートの土日祝日の行に背景色をつける方法 https://tonari-it.com/excel-vba-holiday-interior-color/
と、コードを提示してくれているサイトがあるので、 まずは、このサイトを読んで、もしわからないところがあれば、 質問してみるといいんじゃないでしょうか
クッキングスルールにいって、作り方の説明はいらないから完成品くださいっていったら レストランいけばいいんじゃないって話になりますよね... (´・ω・`) 2023/02/03(金) 10:06:21
なお、「条件書式では、出来てます。」とのことですから、マクロで"条件付き書式"を設定するというアプローチも可能だとおもいます。(必要な命令は【マクロの記録】で調べることができます)
さらに、条件付き書式でできているということは、どこかに祝日リストが用意されていて、2行目?の数字を日付として解釈できる土台があるということでしょうから、1列目から順番に「祝日リストに存在する」or「月曜はじまりのWeekday関数の結果が6以上になる」という条件を満たせば【(該当行の)セルに色を塗る】というループ処理にすればよいと思います。
作成依頼に応じてくれる人が現れず、自分で作ってみようと考え直したのであれば、先に述べたようにコードを示してどこで詰まっているのが具体的に説明して"質問"されるとよいとおもいます。
(もこな2) 2023/02/03(金) 10:08:14
意味不明な書き込みが多いなぁ。
制作依頼の何が問題なんだ?
あと、ここは教室でもなければ、職場でもないけどね。
気にくわなければスルーすればいいだけじゃないの? 私も、条件付き書式で出来ているならVBAでやる必要性を感じないのでスルーだけども。
(半平太) 2023/02/03(金) 10:37:03
沢山の人が使う条件付き書式って、コピペでめっちゃ崩れるから結構土日の色付けはVBAでやっちゃってます。 シートの保護で条件付き書式だけ保護してくれればいいんですけどねぇ なのでセル位置だけ教えてくれれば書いてみたいんですけど・・・ (稲葉) 2023/02/03(金) 10:43:10
>制作依頼の何が問題なんだ?
それがすんなり通ったら、上にある 校内全文検索、過去ログ、よくある質問、ライブラリ、関数、エラー値、ExcelPedia いらね! 自分で全てのマクロただで請け負いますってつくったら。 (偽善者) 2023/02/03(金) 10:59:35
>それがすんなり通ったら、上にある >校内全文検索、過去ログ、よくある質問、ライブラリ、関数、エラー値、ExcelPedia >いらね!
なぜそれを質問者に対してレスしないのだ?
(MK) 2023/02/03(金) 11:09:12
Sub Sample()
'日付情報をもとにセルの背景色を塗りつぶす
Dim 対象範囲 As Range
Dim 日付一覧 As Variant
Dim 土曜色 As Long
Dim 日曜色 As Long
Dim 祝日色 As Long
'↓塗りつぶし色を設定
土曜色 = RGB(128, 224, 255)
日曜色 = RGB(255, 96, 64)
祝日色 = RGB(255, 96, 64)
'↓日付を列挙
日付一覧 = Array("1/1", "2/11", "2/23")
'↓塗りつぶし対象範囲を設定
Set 対象範囲 = Range("A2:G7")
'↓塗りつぶし対象範囲の既存の背景色をリセット
対象範囲.Interior.Color = xlNone
Dim Rng As Range
'↓対象範囲内のセルを一つずつ巡回
For Each Rng In 対象範囲
If Rng.Value = "" Then
'↓セルの値が日付一覧の"月/日"と同じものがあったら
ElseIf IsNumeric(Application.Match(Format(Rng.Value, "m/d"), 日付一覧, 0)) Then
'↓セルの背景に色付け
Rng.Interior.Color = 祝日色
'↓セル値の日付の曜日が日曜日(=1)なら
ElseIf Weekday(Rng.Value) = 1 Then
'↓セルの背景に色付け
Rng.Interior.Color = 日曜色
'↓セル値の日付の曜日が土曜日(=7)なら
ElseIf Weekday(Rng.Value) = 7 Then
'↓セルの背景に色付け
Rng.Interior.Color = 土曜色
End If
Next
End Sub
(ふなば) 2023/02/03(金) 11:31:56
ふなばさん
コード提供ありがとうございます。
稲葉さん
日付けはS9以降右に
曜日はS10以降右に
祝日シートを用意して、A列にリストは
入っています。
お願いできます?
(ヒロ) 2023/02/03(金) 12:57:09
塗りたくる範囲とかわかんなかったんで、適当に列を丸ごとです。
Sub 色付け()
Dim ws日付 As Worksheet: Set ws日付 = Sheets("Sheet1")
Dim ary祝日 As Variant
Dim r As Range
Dim rngColor As Range
Dim buf As Variant
Dim Is休日 As Boolean
With Sheets("祝日")
'[祝日リストを取得し、一次配列にする]
ary祝日 = Application.Transpose(.Range("A1", .Cells(Rows.Count, "A").End(xlUp)).Value)
End With
With ws日付
'[色のリセット]
.Cells.Interior.Color = xlNone
'[S9からCtrl+→までの範囲を対象]
For Each r In .Range("S9", .Range("S9").End(xlToRight))
Is休日 = False
Select Case True
Case InStr("土日", r.Offset(1).Value) > 0
Is休日 = True
Case UBound(Filter(ary祝日, Format$(r.Value, "yyyy/m/d"), True)) > -1
Is休日 = True
End Select
'https://itsakura.com/html-color-codes
If Is休日 Then r.EntireColumn.Interior.Color = rgbAliceBlue
Next r
End With
End Sub
日付シート
|[S] |[T] |[U] |[V] |[W] |[X] |[Y] |[Z] |[AA]
[9] |1月1日|1月2日|1月3日|1月4日|1月5日|1月6日|1月7日|1月8日|1月9日
[10]|日 |月 |火 |水 |木 |金 |土 |日 |月
祝日シート
|[A]
[1]|祝日
[2]|1月1日
[3]|1月9日
こんな感じのテスト環境つくって試しました (稲葉) 2023/02/03(金) 15:15:30
Sub Sample()
'日付情報をもとにセルの背景色を塗りつぶす
Dim 対象範囲 As Range
Dim 日付一覧 As Range
Dim 土曜色 As Long
Dim 日曜色 As Long
Dim 祝日色 As Long
'↓塗りつぶし色を設定
土曜色 = RGB(128, 224, 255)
日曜色 = RGB(255, 96, 64)
祝日色 = RGB(255, 96, 64)
'↓日付一覧のあるセル範囲を指定
Set 日付一覧 = Worksheets("祝日シート").UsedRange.Columns(1)
'↓塗りつぶし対象範囲を設定(例示はS9セルを基準に10行31列)
Set 対象範囲 = Range("S9").Resize(10, 31)
'↓塗りつぶし対象範囲の既存の背景色をリセット
対象範囲.Interior.Color = xlNone
Dim Rng As Range
Dim buf As Long
Dim セルの色 As Long
'↓対象範囲内のセルを一列ずつ巡回
For Each Rng In 対象範囲.Columns
'↓列の1行目の値を変数bufに格納
buf = Rng.Cells(1).Value
Select Case True
'↓セルの値が日付一覧と同じものがあったら
Case IsNumeric(Application.Match(buf, 日付一覧, 0)): セルの色 = 祝日色
'↓セル値の日付の曜日が日曜日(=1)なら
Case Weekday(buf) = 1: セルの色 = 日曜色
'↓セル値の日付の曜日が土曜日(=7)なら
Case Weekday(buf) = 7: セルの色 = 土曜色
'↓上記以外
Case Else: セルの色 = xlNone
End Select
'↓セルの背景に色付け
Rng.Interior.Color = セルの色
Next
End Sub
(ふなば) 2023/02/03(金) 17:51:50
Sub 実験用ブック生成()
With Workbooks.Add
.Worksheets.Add(after:=.Worksheets(.Worksheets.Count)).Name = "祝日リスト"
.Worksheets("祝日リスト").Range("A2").Value = #1/1/2023#
.Worksheets("祝日リスト").Range("A3").Value = #1/10/2023#
.Worksheets("祝日リスト").Range("A4").Value = #1/12/2023#
With .Worksheets(1).Range("A2")
.Value = #1/1/2023#
.NumberFormatLocal = "d"
.AutoFill Destination:=.Resize(, 31), Type:=xlFillDefault
.Resize(, 31).Offset(1).Formula = "=A2"
.Resize(, 31).Offset(1).NumberFormatLocal = "aaa"
End With
.Worksheets(1).Cells.EntireColumn.AutoFit
.Worksheets(1).Activate
End With
End Sub
'=========================================
Sub 条件付き書式を設定()
ActiveSheet.Range("A6:AE6").FormatConditions.Add( _
Type:=xlExpression, _
Formula1:="=COUNTIF(祝日リスト!$A:$A,A$2)+IF(WEEKDAY(A$2,2)>=6,1,0)") _
.Interior.Color = vbRed
End Sub
'=========================================
Sub ループ処理()
Dim 列 As Long
With ActiveSheet
For 列 = 1 To .Cells(2, .Columns.Count).End(xlToLeft).Column
If WorksheetFunction.CountIf(.Parent.Worksheets("祝日リスト").Columns(1), .Cells(2, 列).Value) > 0 Or _
Weekday(.Cells(2, 列).Value, vbMonday) >= 6 Then
.Cells(4, 列).Interior.Color = vbBlue
End If
Next 列
End With
End Sub
(もこな2) 2023/02/03(金) 17:54:31
せっかく コードを提供くださった方々 ありがとうございます。
一言お礼のコメントです。
早速コードを使用したいと思います。
また、研究もします(*^^*)
(ヒロ) 2023/02/03(金) 20:41:55
For Each r In .Range("S9", .Range("S9").End(xlToRight))
この部分とは思いますが?
後 土日が反映されてないのですが?祝日リストに 土日の日付はいれないですよね!?
教えてください。稲葉様
(ヒロ) 2023/02/28(火) 20:21:56
For Each r In .Range("S9:Z9"))
に変更
If Is休日 Then r.EntireColumn.Interior.Color = rgbAliceBlue を If Is休日 Then r.Resize(100 - 9).Interior.Color = rgbAliceBlue 'S9から(100行 - 9行 + 1行)分範囲を広げる
>後 土日が反映されてないのですが?祝日リストに 土日の日付はいれないですよね!? 10行目が文字列としていることを前提としていたので、書式設定で土日に「見える」ようになっている場合 >r.Offset(1).Value を r.Offset(1).Text に変更すればたぶん大丈夫。 (稲葉) 2023/03/01(水) 09:19:27
あ、ミスった
For Each r In .Range("S9:Z9"))
→ For Each r In .Range("S9:Z9")
If Is休日 Then r.Resize(100 - 9).Interior.Color = rgbAliceBlue →If Is休日 Then r.Resize(100 - 9 + 1).Interior.Color = rgbAliceBlue (稲葉) 2023/03/01(水) 09:20:56
ありがとうございます。
土日の色付けがうまくいきません。
何か問題ありますでしょうか?
(ヒロ) 2023/03/01(水) 19:21:26
For Eachの下に Debug.Print r.Offset(1).Text といれて、イミディエイトウィンドウに何が表示されるか確認してください。 https://www.excelspeedup.com/vbadebug/
正確な情報がないとこちらもわからんです。 (稲葉) 2023/03/01(水) 20:16:06
>表示は、月〜金まで表示されています。
ってことは土日ないんじゃ?
Case InStr("土日", r.Offset(1).Value) > 0
↑を
Case InStr("土日", Format$(r.Value, "aaa")) > 0
に変更して、動かないようなら私にはわかりませんので他の方の回答お待ちください。
(稲葉) 2023/03/02(木) 09:11:03
確認しました。上手くいきました。
ありがとうございます。
質問です、 r.Resize(100 - 9 + 1) ここで の
カッコの中の意味を教えていただきたいです。
今までお付き合いくださりありがとうございます。
(ヒロ) 2023/03/02(木) 12:17:42
に書いてあります (稲葉) 2023/03/02(木) 13:02:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.