- ベストアンサー
エクセルVBA計算結果をmsgに表示
お世話になります、この度for Eath C in Range("B3").Re Size(6,7) if Application.count If Range("B3:B500"),C.Varue)>0 Thenこの計算結果をmsgに表示させる構文をどなたか教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
回答No.5の続きです。 myDefault = Format(Date, "yyyy/m") label1: myDate = Application.InputBox("年月を下記のいずれかの形式で入力してください" _ & vbCrLf & vbCrLf & Year(Date) & "/1" & vbCrLf & Year(Date) & "/01" _ & vbCrLf & Year(Date) & "-1" & vbCrLf & Year(Date) & "-01" _ & vbCrLf & Year(Date) & "年1月" & vbCrLf & Year(Date) & "年01月" _ & vbCrLf & Format(Year(Date) & "/1/1", "ggge年m月") _ & vbCrLf & Format(Year(Date) & "/1/1", "ggge年mm月") _ & vbCrLf & Format(Year(Date) & "/1/1", "gge年m月") _ & vbCrLf & Format(Year(Date) & "/1/1", "ggge-m") _ & vbCrLf & Format(Year(Date) & "/1/1", "gge-m") _ & vbCrLf & Format(Year(Date) & "/1/1", "ge-m") _ & vbCrLf & Format(Year(Date) & "/1/1", "ge.m") _ , "年月の指定", myDefault, Type:=2) If myDate = vbNullString Or myDate = False Then temp = MsgBox("値が入力されていません。" & vbCrLf _ & "年月の入力をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:年月の入力をやり直します" & vbCrLf _ & "[いいえ]:処理を中止してマクロを終了します", _ vbYesNo + vbExclamation, "年月未入力") If temp = vbNo Then GoTo labelE Else GoTo label1 End If End If If myDate Like "*?年*?月" And IsDate(myDate & "1日") Then _ myDate = Format(myDate & "1日", "yyyy/mm/dd") For i = 1 To 3 temp = Mid("/-.", i, 1) If myDate Like "*?" & temp & "*?" And IsDate(myDate & temp & 1) Then _ myDate = Format(myDate & temp & 1, "yyyy/mm/dd") Next i If Not (myDate Like "####/##/##" And IsDate(myDate)) _ Or myDate = "9999/12/01" Then GoTo label2 Nen = Year(myDate) Tuki = Month(myDate) If Nen < 1904 Then GoTo label2 myDefault = Format(myDate, "yyyy/m") temp = MsgBox("入力された年月は " _ & Format(myDate, "ggge年(yyyy年)m月") & " です。" & vbCrLf _ & "この年月で処理を実行しますか?" & vbCrLf & vbCrLf _ & "[はい]:この年月で処理を実行します" & vbCrLf _ & "[いいえ]:年月の入力をやり直します" & vbCrLf _ & "[キャンセル]:処理を中止してマクロを終了します", _ vbYesNoCancel + vbQuestion, "指定年月の確認") Select Case temp Case vbCancel GoTo labelE Case vbNo GoTo label1 Case Else myMsg = "" End Select With Application .ScreenUpdating = False .Calculation = xlManual End With Range("A:H").Clear With Range("B1") .Value = DateSerial(Nen, Tuki, 1) .NumberFormatLocal = "yyyy""年""m""日""" End With With Range("B2") .Resize(, 7) = Split("日,月,火,水,木,金,土", ",") myOffset = Weekday(DateSerial(Nen, Tuki, 1)) - 2 For i = 1 To Day(DateSerial(Nen, Tuki + 1, 0)) .Offset(Int((myOffset + i) / 7) + 1, (myOffset + i) Mod 7).Value _ = DateSerial(Nen, Tuki, i) Next i .Resize(7, 7).HorizontalAlignment = xlCenter .Offset(1).Resize(6, 7).NumberFormatLocal = "d" .Resize(7).Font.Color = RGB(255, 0, 0) .Offset(, 1).Resize(7).Font.Color = RGB(0, 255, 0) .Offset(, 6).Resize(6).Font.Color = RGB(0, 0, 255) End With AssociatedCells = "" n = 0 With DataSheet For i = 5 To 500 For j = 1 To 5 temp = .Range(DataColumn(j) & i).Value If temp Like "*#/*#/*#" And IsDate(temp) Then If Year(temp) = Nen And Month(temp) = Tuki Then n = n + 1 AssociatedCells = AssociatedCells & "," & i With Range("B2").Offset(Int((myOffset + i) / 7) + 1, (myOffset + i) Mod 7) .Interior.Color = 65535 With .Font .Bold = True .Size = 30 End With End With Exit For End If End If Next j Next i If n = 0 Then MsgBox Format(myDate, "ggge年(yyyy年)m月") _ & "分のデータは見つかりませんでした。" & vbCrLf _ & "マクロを終了します。", vbInformation, "該当データ無し" GoTo labelEnd End If AssociatedCells = Mid(Replace(AssociatedCells, ",", "," & DataColumn(0)), 2) i = 0 For Each c In .Range(AssociatedCells) temp = "" i = i + 1 For j = 1 To 5 temp = temp & ItemName(j) & " : " & .Range(DataColumn(j) & c.Row).Value & vbCrLf Next j temp = MsgBox( _ temp & vbCrLf & ItemName(0) & " : " & .Range(DataColumn(0) & c.Row).Value, _ vbInformation + vbOKCancel, _ Nen & "年" & Tuki & "月のData [" & i & "/" & n & "]") If temp = vbCancel Then Exit For Next c End With GoTo labelE label2: MsgBox "入力された値は年月として扱う事が出来ません。" _ & vbCrLf & "年月の入力をやり直して下さい。", _ vbOKOnly + vbExclamation, "入力値不適切" GoTo label1 labelE: MsgBox "マクロを終了します。", vbInformation, "終了" labelEnd: With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub 以上です。
その他の回答 (5)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>下記が私の使っている構文ですがこれにRange iとjのデータをMSGBoxに表示させたいのです との事ですが、失敗したVBAの構文を見せられても何をしたいのか良く解りません。 何をしたいのかを文章を使って具体的に説明して下さい。 質問者様が作ったVBAの構文の後半が If Application.CountIf(Sheets("予定入力画面").Range("B5:B500"), c.Value) > 0 Then c.Font.Color = RGB(0, 255, 0) c.Font.Size = 30 End If Next c For Each e In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("C5:C500"), e.Value) > 0 Then e.Font.Bold = True e.Font.Size = 16 End If Next e For Each f In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("E5:E500"), f.Value) > 0 Then f.Font.Color = RGB(0, 0, 0) f.Font.Bold = True f.Font.Size = 30 End If Next f For Each G In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("G5:G500"), G.Value) > 0 Then G.Font.Color = RGB(0, 255, 0) G.Font.Bold = True G.Font.Size = 30 End If Next G For Each H In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("I5:I500"), H.Value) > 0 Then H.Font.Color = RGB(255, 0, 0) H.Font.Size = 30 End If Next H となっているという事は、 >If Application.CountIf(Range("B5:B500"), C.Value) > 0 Then >("sheet3")のi行5番目から500番まで予定日、j行5番目から500番まで詳細が入力されています。 という話も間違いで、実際に日付が入力されている列はB列、C列、E列、G列、I列の5列もあり、その5列の内のどれか1つにでも、指定した月の日付が入力されているセルがあれば、それらのセルと同じ行にあるJ列の値をメッセージボックスに表示させたいという事なのでしょうか? それとも、質問者様のVBAの方が間違いで、日付けが文字色を入力されているのはI列のみなのでしょうか? 回答する度に質問者様が前回の説明とは矛盾する情報を提示するばかりで、ろくに説明をしないため、どの様な状況なのかも、何をしたいのかも良く解りません。 どの様な状況なのかという事と、何をしたいのかという事を文章を用いて、具体的かつ不足なく明確に説明して下さい。 それと、質問者様が作ったVBAでは、B列、C列、E列、G列、I列の中に指定した月の日付が入力されている場合には、それらの列の中のどの列に該当する日付が入力されているのかに応じて、カレンダーの日付のセルの書式設定を変える事で、B列、C列、E列、G列、I列のセルの中でどの列のセルに指定した月の日付が入力されているのかを区別する様になっている様ですが、そのような書式設定の違いを設けようとしても、そのやり方では上手く区別が付く様にする事は出来ません。 何故なら、B列、C列、E列、G列、I列の中に、同じ日付で尚且つ指定した月の日付の日が入力されているセルが複数存在していた場合、カレンダーの中で該当する日付が入力されているセルの書式を例えば「B列にその日付が存在している事を表す書式」に変更したとしても、C列にも同じ日付が存在していれば、カレンダー上のその日付が入力されているセルには後から「C列にその日付が存在している事を表す書式」が上書きされてしまい、「B列にその日付が存在している事を表す書式」は消えてしまいますので、「B列にその日付が存在している事」を表示する事が出来なくなります。 この様に複数の列に同じ日付が入力されている場合には、書式設定の違いだけで5つの列の内のどの列とどの列に指定した月の日付があるのかを表す事は出来ません。 特に、書式の中でも文字色を白、赤、黒の3色に変えるのは意味がありません。 何故なら、赤の文字色は日曜日の日と同じ色ですので日曜日と区別がつきませんし、黒の文字色は火曜日~金曜日の日と同じ色ですので火曜日~金曜日の日と区別がつきませんし、白の文字色はセルの背景の色と同じですので文字色を白にしてしまったのでは日付を表している文字が見えなくなってしまいます。 又、前回の回答でも申し上げましたが、 For Each H In Range("B3").Resize(6, 7) の様に、日付けを基準に繰り返し処理をしたのでは、各日付ごとに1回ずつしかMsgboxを表示しないという事になりますので、同じ日付となっているデータが複数行存在していた場合には、その内の1行に入力されているデータしか表示出来ない事になり、同じ日付の他のデータは表示されなくなってしまいます。 上記の様に、状況や何をしたいのかに関して説明されていない事が多かったり、処理をするのに都合が悪い方法を使っている点、話に矛盾する点がありますので、取りあえず叩き台として、 「Inputboxで年月を入力すると、現在開いているシートのB1セルにその年月を表示し、B2:H8のセル範囲にカレンダーを作成し、そのカレンダーの日曜日の欄は文字色を赤、月曜日の欄は文字色を緑、土曜日の欄は文字色を青にした上で、予定入力画面シートのB列、C列、E列、G列、I列のセルの中に指定した月の日付が入力されているセルが存在している場合には、そのセルと同じ行にあるJ列のセルの値をMsgboxに表示し、その上で作成したカレンダーの中で『予定入力画面シートのB列、C列、E列、G列、I列に存在している日付』が入力されているセルの書式設定を、(文字色は変えずに)フォントサイズを30の太字にした上で、セルの背景色を黄色にする」 というマクロのVBAの構文をお伝えしておきますので、もし何か不都合な点があれば、何がどの様に違っているのかという事と、どの様に改良したいのかという事を、必ず文章を使い具体的な例を挙げて不足なく説明して下さい。 Sub calendar_month12_改() Const DataSheetName = "予定入力画面" Dim myDefault As String Dim DataSheet As Worksheet Dim myDate As Variant Dim Nen As Integer, Tuki As Byte Dim DataColumn Dim ItemName Dim AssociatedCells As String Dim i As Long Dim j As Integer Dim c As Range Dim n As Long Dim myOffset As Integer Dim temp As Variant DataColumn = Split("J,B,C,E,G,I", ",") ItemName = Array("詳細", "日付1", "日付2", "日付3", "日付4", "日付5") If IsError(Evaluate("ROW('" & DataSheetName & "'!A1)")) Then MsgBox "元データが入力されているシートとして設定されている" _ & vbCrLf & vbCrLf & DataSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If Set DataSheet = Sheets(DataSheetName) ※まだ途中なのですが、このサイトの回答欄は4000文字までしか入力する事が出来ませんので、残りは又後で投稿させて頂きます。
お礼
有難うございます、感謝しています。
補足
有難うございます。遅くなり申し訳ありません。 Sheets("予定入力画面")のRange(B2訪問予定日)(C2個人予定日) (D2詳細)(E2家族予定日)(F2詳細1)(G2祝日)(H2詳細2)(I2メイン予定日)(J2詳細3)となっていまして、その内I2,J2列のデータをmsgBoxに表示(各月ごとにその月のデータを)させたいのです。ですのでその日の重複はありません。尚、Range(I2が日付J2がその詳細となっています、何卒よろしくお願いします。こういうことは最初に書くべきでしたすみません。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>("sheet3")のi行5番目から500番まで予定日、j行5番目から500番まで詳細が入力されています。("sheet2")にカレンダーがありその月を呼び出すとmsgで詳細を表示させたいのです。 との事ですが、そのカレンダーとはSheet2のどこのセル範囲に入力されているのですか? >for Eath C in Range("B3").Re Size(6,7) としておられる事から推測しますと、ひょっとしてB2~H2のセル範囲に日月火水木金土の曜日が入力されていて、B3~H8のセル範囲に1~31の数値(日付データではない単なる数値データ)が入力されているという事なのでしょうか? もしそうであるのなら、Sheet2のB3~H8のセル範囲に入力されている数値だけでは、「その月」とは何年の何月の事であるのか不明なままですので、 >その月を呼び出す などという事は出来ません。 ですから、「その月」とは西暦何年の何月の事であるのかを、一体どうやって指定しているのかを御教え願います。 それさえ判明したならば、1日~月末までの日付を検索の基準値とする事は決まっているのですから、Sheet2のB3~H8のセル範囲に入力されている数値の情報は必要ありません。 それと、Sheet3のI列(「i行」ではありません)の5行目~500行目の範囲に入力されている日付の中には、同じ日付のデータが複数行に入力されている可能性も考えられますが、 >for Eath C in Range("B3").Re Size(6,7) の様に、日付けを基準に繰り返し処理をしたのでは、各日付ごとに1回ずつしかMsgboxを表示しないという事になりますので、同じ日付となっているデータが複数行存在していた場合には、その内の1行に入力されているデータしか表示出来ない事になり、同じ日付の他のデータは表示されなくなってしまいます。 For Each ~ in ~Nextの中に更にDo~Loopを組み込む事で、繰り返し処理を二重にするという方法もあり得ますが、VBAの構文が無駄に複雑化してしまいます。 ですから、繰り返し処理を行う対象を、Range("B3").Re Size(6,7)にするではなく、Sheets("Sheet3").Range("I5:I500")にされた方が良いと思います。 さて、前述の通り、「その月」とは何年の何月の月の事なのかを決める指定方法が不明ですので、取りあえず仮の話として、例えば2015年の12月を指定する場合にはSheet2のB1セルに2015か平成27と入力し、D1セルに12と入力するという指定の仕方をしている場合におけるVBAを御伝え致します。 Sub QNo9093524_エクセルVBA計算結果をmsgに表示() Const DateColumn = "I", DetailColumn = "J", FirstRow = 3 Dim myYear, myMonth, d As Variant, n As Long, LastRow As Long, _ FirstDay As Date, LastDay As Date, i As Long, j As Long, temp As Variant With Sheets("Sheet2") myYear = .Range("B1").Value myMonth = .Range("D1").Value End With If Not IsDate(myYear & "年" & myMonth & "月1日") Then MsgBox "年月が指定されていません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "年月未設定" Exit Sub End If FirstDay = DateValue(myYear & "年" & myMonth & "月1日") LastDay = DateAdd("m", 1, FirstDay) - 1 myYear = Year(FirstDay) With Sheets("Sheet3") LastRow = 500 n = WorksheetFunction.CountIfs( _ .Range(DateColumn & FirstRow & ":" & DateColumn & LastRow), ">=" & FirstDay, _ .Range(DateColumn & FirstRow & ":" & DateColumn & LastRow), "<" & LastDay + 1) If n = 0 Then MsgBox myYear & "年" & myMonth & "月には該当するデータがありません。" _ & vbCrLf & "マクロを終了します。", vbInformation, "該当データ無し" Exit Sub End If For i = FirstRow To LastRow d = .Range(DateColumn & i).Value temp = "" If d <> "" And IsDate(d) Then If Year(d) = myYear And Month(d) = myMonth Then j = j + 1 temp = MsgBox(.Range(DetailColumn & i).Value, vbInformation + vbOKCancel, _ myYear & "年" & myMonth & "月Data[" & j & "/" & n & "]:" & Day(d) & "日") End If End If If temp = vbCancel Then Exit For Next i End With End Sub
お礼
有難うございます
補足
早速書いていただきありがとうございます。 下記が私の使っている構文ですがこれにRange iとjのデータをMSGBoxに表示させたいのです、宜しくお願いします。 Sub calendar_month12() Dim myDate As String Dim Nen As Integer, Tuki As Integer Dim i As Integer, j As Long, k As Integer Dim cn As Long Dim myTitleD, myTitle(1 To 1, 1 To 7) Dim myTable(1 To 6, 1 To 7) Dim c As Range Dim e As Range Dim f As Range myDate = Application.InputBox(Title:="年月の指定", _ Prompt:="年月を 2016/1 の形式で入力してください", _ Default:="2016/1", Type:=2) Nen = Year(myDate) Tuki = Month(myDate) myTitleD = Array("日", "月", "火", "水", "木", "金", "土") For k = 0 To 6 myTitle(1, k + 1) = myTitleD(k) Next k cn = 1 For j = DateSerial(Nen, Tuki, 1) To DateSerial(Nen, Tuki + 1, 0) If Day(j) <> 1 And Weekday(j) = 1 Then cn = cn + 1 myTable(cn, Weekday(j)) = Format(j, "yyyy/m/d") Next j Application.ScreenUpdating = False Range("A:H").Clear Range("B1").Value = DateSerial(Nen, Tuki, 1) Range("B2").Resize(1, 7).Value = myTitle Range("B3").Resize(6, 7).Value = myTable Range("B1").NumberFormatLocal = "yyyy""年""m""""" Range("B2").Resize(7, 7).HorizontalAlignment = xlCenter Range("B3").Resize(6, 7).NumberFormatLocal = "d" Range("B2").Resize(6, 1).Font.Color = RGB(255, 0, 0) Range("B7").Resize(6, 1).Font.Color = RGB(255, 0, 0) Range("C2").Resize(6, 1).Font.Color = RGB(0, 255, 0) Range("H2").Resize(6, 1).Font.Color = RGB(0, 0, 255) For Each c In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("B5:B500"), c.Value) > 0 Then c.Font.Color = RGB(0, 255, 0) c.Font.Size = 30 End If Next c For Each e In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("C5:C500"), e.Value) > 0 Then e.Font.Bold = True e.Font.Size = 16 End If Next e For Each f In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("E5:E500"), f.Value) > 0 Then f.Font.Color = RGB(0, 0, 0) f.Font.Bold = True f.Font.Size = 30 End If Next f For Each G In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("G5:G500"), G.Value) > 0 Then G.Font.Color = RGB(0, 255, 0) G.Font.Bold = True G.Font.Size = 30 End If Next G For Each H In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("I5:I500"), H.Value) > 0 Then H.Font.Color = RGB(255, 0, 0) H.Font.Size = 30 End If Next H Application.ScreenUpdating = True End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
当方の、テストのためセル範囲は変えてある(Msgboxの表示が多いとやってられない)が Sub test02() Dim c As Range For Each c In Range("B3").Resize(4, 3) 'B3を起点に4行3列の範囲の各セルの値について x = Application.WorksheetFunction.CountIf(Range("F1:H10"), c.Value) MsgBox c & " " & x Next End Sub のようなコードだと思う。 質問のコードは ・行分けしていない。もう少し長くコードを示さないとわかりにくい。 ・変なところにスペースが入ったり、(Re Size、.count If ) ・Application.count だったり(普通は略してもWorksheetFunction.CountIfではないか) しているが、できるだけ正確に書くこと。 ・文章でやりたいことを表現すること(全体に、なぜこんなことをやりたいのかわかりにくい) ・Range("B3").Re Size(6,7)とRange("B3:B500"),が共通範囲があるのはなぜなど ・質問なのにミスペルがある(Eath 、Varue) ・「msg」に表示はMsgboxのことか ・Resizeをなぜ使うのか。 初心者の質問かベテランの質問かよくわからない質問だな。
お礼
有難うございました。
補足
すみません間違えました、If Application.CountIf(Range("I5:I500"), C.Value) > 0 Then ("sheet3")のi列5行目から500行まで予定日、j列5ばん行目から500行まで詳細が入力されています。("sheet2")にカレンダーがあり年/月を呼び出すとmsgBoxに予定が入っている("sheet3")のj列の詳細を表示させたいのです。宜しくお願いします。
- kagakusuki
- ベストアンサー率51% (2610/5101)
もしこれが >for Eath C in Range("B3").Re Size(6,7) >if Application.count If Range("B3:B500"),C.Varue)>0 Thenこの計算結果をmsgに表示させる構文 ではなく、 「Application.Countif Range("B3:B500"),C.Varue) の計算結果をMsgboxに表示させる構文」 という事であったのなら、 Msgbox Application.Countif Range("B3:B500"),C.Varue) で計算結果をMsgboxに表示させる事が出来るのですが、御質問内容はそうではなく >for Eath C in Range("B3").Re Size(6,7) >if Application.count If Range("B3:B500"),C.Varue)>0 Thenこの計算結果をmsgに表示させる構文 となっています。 しかしながら for Eath C in Range("B3").Re Size(6,7) if Application.count If Range("B3:B500"),C.Varue)>0 Then という構文は、どの様な処理を行うのかという事を指定するための構文であって、計算結果を求めるための構文では御座いませんので、 for Eath C in Range("B3").Re Size(6,7) if Application.count If Range("B3:B500"),C.Varue)>0 Then には元々、「計算結果」というものが存在しません。 そのため、 >for Eath C in Range("B3").Re Size(6,7) >if Application.count If Range("B3:B500"),C.Varue)>0 Thenこの計算結果 などという存在していないものを >msgに表示させる などという事は不可能なのです。 ですから、一体何の計算結果を表示させたいのかを御説明願います。
お礼
有難うございますよろしくお願いします
補足
すみません間違えました、If Application.CountIf(Range("B5:B500"), C.Value) > 0 Then ("sheet3")のi行5番目から500番まで予定日、j行5番目から500番まで詳細が入力されています。("sheet2")にカレンダーがありその月を呼び出すとmsgで詳細を表示させたいのです。宜しくお願いします。
- dogs_cats
- ベストアンサー率38% (278/717)
Sub test() Dim C As Range For Each C In Range("B3").Resize(6, 7) If Application.CountIf(Range("A1:D20"), C.Value) > 0 Then MsgBox Application.CountIf(Range("A1:D20"), C.Value) End If Next End Sub カウントする文字のセル範囲と検索範囲が重複指定しています。一般的に行わないと思いますが、本当に良いんですか?
お礼
有難うございました。
補足
すみません間違えました、If Application.CountIf(Range("B5:B500"), C.Value) > 0 Then ("sheet3")のi行5番目から500番まで予定日、j行5番目から500番まで詳細が入力されています。("sheet2")にカレンダーがありその月を呼び出すとmsgで詳細を表示させたいのです。宜しくお願いします。
お礼
有難うございます。
補足
次々と補足して申し訳ありません For Each e In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("C5:C500"), e.Value) > 0 Then e.Font.Bold = True e.Font.Size = 16 End If Next e は土日祝日以外の日に私的な予定での場所で予定を入れるとカレンダーのその日の数字が小さくなるようにしてあります。 For Each G In Range("B3").Resize(6, 7) If Application.CountIf(Sheets("予定入力画面").Range("G5:G500"), G.Value) > 0 Then G.Font.Color = RGB(0, 255, 0) G.Font.Bold = True G.Font.Size = 30 End If Next Gは祝日を入力するところで赤色になるようにしています それからIf Application.CountIf(Sheets("予定入力画面").Range("B5:B500"), c.Value) > 0 Then c.Font.Color = RGB(0, 255, 0) c.Font.Size = 30 End If Next cは訪問者があるとき緑になるようにしています。 書いていただいた構文見ています、気になるところは文字背景色が5日からしか入らないのと上記の書いた部分がないところです。 なにとぞ宜しくお願いします。