エクセル2002にてカレンダーを作りました。
(例) 2008年1月
| C D E F G H I
8| 月 火 水 木 金 土 日
9| 1 2 3 4 5 6
10| 7 8 9 10 11 12 13
11|14 15 16 17 18 19 20
12|21 22 23 24 25 26 27
13|28 29 30 31
この下に2月~6月、横に7月~12月があり、休日を塗りつぶしています。
休日は祝日ではなくて当社の休日です。(2色)
セルの値は書式設定で「yyyy/mm/dd」を「dd」だけにして表示させています。
例えば1月21日~2月20日で塗りつぶしたセルの合計を出したいのです。(2色なので色別に)
数式ではダメなようですので、VisualBasciでもOKですので、
どなたか御教授いただけないでしょうか?
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
多少汎用的に考えてユーザ定義関数にしてみました
以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。
VBE画面を閉じてワークシート画面に戻り
=Csum(C8:I50,A3,A1,A2)
のように4つの引数を指定して式を入力します
1番目:塗りつぶしたセルを数えるセル範囲
2番目:数えたい色で塗られているセルアドレス
3番目:開始日が入力されたセルアドレス
4番目:終了日が入力されたセルアドレス
2番目の引数で指定するセルは、予め背景色を塗っておいてください。
また3、4番目のセルが日付型の値でない場合や、開始日>終了日のときは#VALUE!エラーを返します
Function Csum(ByVal rng, trg, dt1, dt2 As Range) As Long
Dim r As Range
Dim tCidx
Dim fDate, tDate As Date
tCidx = trg.Cells(1, 1).Interior.ColorIndex
If IsDate(dt1.Value) And IsDate(dt2.Value) Then
fDate = dt1.Value
tDate = dt2.Value
Else
Csum = ""
Exit Function
End If
If fDate > tDate Then
Csum = ""
Exit Function
End If
For Each r In rng
If r.Interior.ColorIndex = tCidx Then
If IsDate(r.Value) Then
If r.Value >= fDate And r.Value <= tDate Then
Csum = Csum + 1
End If
End If
End If
Next r
End Function
なおセルの背景色を変更する動作を行っても関数の再計算は自動的にされません。カレンダの日付を先に入力して、後から背景色を変更した場合は
ALT+Ctrl+F9
で強制再計算させる必要があります。
この回答への補足
御回答有難うございます。
ほぼ自分の意図した物になってきましたが、
なんとか自動で再計算させる方法はないのでしょうか?
これが出来きたら完璧なるのですが。
No.3
- 回答日時:
#02です
>ほぼ自分の意図した物になってきましたが
ということはご自身で手を加えていただいたと言うことですね。参考になって幸いです。
私はきれいな方法で確実に強制再計算を自動化する方法を知りません。
Loop処理の中でSendkeysとDoEventsを用いて{Alt+Ctrl+F9}を一定間隔で発生させる方法は考えられますが、間隔をあまり短くすると普通の操作に支障が出るかもしれません。あるいはOnTimeメソッドでSendkeysを呼ぶのもアリでしょうし、Worksheet_CalculateイベントでSendkeysを呼ぶ方法も考えられます。
これらの方法は試していませんので、ご自身で色々とお試しください。
No.1
- 回答日時:
セルの塗りつぶし(文字のフォント色も同じ)は
(1)書式設定 書式ーセルーパターンー色指定
(2)条件付書式 書式ー条件付書式ー値が(式が)・・-色指定
の2つがあります。
ーー
C3は(1)で赤(セルパターン色)
C5は(2)で赤(セルパターン色)
を設定しました
Sub test01()
MsgBox Cells(3, "C").Interior.ColorIndex
MsgBox Cells(5, "C").Interior.ColorIndex
End Sub
を実行すると(1)は3、(2)は-4142(色設定なしと同じ)
になりました。
条件付貴書式の方の色判別は(Msgboxはわざと表示用にしている。)
MsgBox Cells(5, "C").FormatConditions(1).Interior.ColorIndex
のようにしないとならないようです。
ーー
ですから、本件質問の場合は
(1)か(2)のどちらであるのか
(2)の場合は条件は何か
を書かないと、この質問に回答できません。
ーー
>休日は祝日ではなくて当社の休日です
とあるところから推測すると、(1)のケースでないかと思う。
ーー
そこで
1月の場合
Sub test02()
Dim cl As Range
k = 1
For Each cl In Range("C9:i13")
If cl.Interior.ColorIndex = 3 Then
k = k + 1
Next
Cells(3, "Z") = k
End Sub
のようなコードを組むことになるが、12ヶ月を1度に出すには
1月以外は、セルの情報が質問に具体的でないので、コードが書けない。
質問者が修正する力があれば、参考にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- Excel(エクセル) Excel 数行を1組とする300組ほどあるデータの項目を揃えたいです。 3 2023/01/26 19:38
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/12/23 14:57
- Excel(エクセル) 出勤簿の土、日、休日に色付けできない 2 2022/08/04 20:10
- Excel(エクセル) 年月表示を取り出すには 5 2023/02/23 22:51
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
- その他(Microsoft Office) エクセルの休日について教えてください。 1 2023/01/06 15:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで年月日データから下二桁...
-
Excelで、セル内改行もそっくり...
-
Excel 日付を比較したら、同じ...
-
エクセルのセルが縦方向にのびる
-
エクセル 関数 セルの値が0...
-
エクセルのセルに「=A13」...
-
エクセルで特定のセルを表示の...
-
横書きで縦の波線の書き方
-
ワードの表の中に文字を入れる...
-
Excelで来月以降の日付のセルを...
-
エクセルで文字の上に重ねがき...
-
Excelの条件付き書式で、計算式...
-
【Excel】セルの中の文字の下の...
-
Excelで前ゼロを取る方法
-
セルA1とB1の数値が一致しな...
-
エクセルでセルに何も入力して...
-
勤務時間を10進法で合計を出したい
-
Excelで土、日、祝日の色分けが...
-
エクセル 特定のセルをグレー...
-
VBAでセルデータの転記(文字列)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで年月日データから下二桁...
-
エクセルのセルに「=A13」...
-
ワードの表の中に文字を入れる...
-
Excelで、セル内改行もそっくり...
-
エクセルのセルが縦方向にのびる
-
エクセルで特定のセルを表示の...
-
エクセル 関数 セルの値が0...
-
Excelで来月以降の日付のセルを...
-
横書きで縦の波線の書き方
-
エクセルで文字の上に重ねがき...
-
エクセルでセルに何も入力して...
-
セルA1とB1の数値が一致しな...
-
Excelの条件付き書式で、計算式...
-
【Excel】セルの中の文字の下の...
-
勤務時間を10進法で合計を出したい
-
Excel2007でセルに値があるはず...
-
concatenate関数で片方のセルの...
-
Excelで前ゼロを取る方法
-
Excelで土、日、祝日の色分けが...
-
エクセルでシート保護してもフ...
おすすめ情報