- ベストアンサー
開館カレンダー、休館日の文字色の変更方法?
公営施設に勤務する超初心者です。エクセルで休館日カレンダーをつくろうと思い立って悪戦苦闘の末、年度の数字と年度初日の曜日そしてプリント期間(4,7,10,1月から半年)に代わる数字を所定のセルに入力すれば、カレンダー表示ができるところまでは漕ぎ着けました。残るは休館日にあたるセルの表示色を変更することです。 休館日は火曜日と祝日の翌日が休館日と決まっているのですが、それは原則にすぎず職員でも理解できないような振り替えが行われるため条件付けに考えが及びません。そこで、例えばシート1のD5のセルを赤色にするとシート2(プリント頁で保護)のD5のセルも赤色になるという設定ができないかなと思って調べているのですがドンピシャの答えに巡り会えません。宜しくご教示の程お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
シート2のD5のセルには何が入ってますが? 例えば [=Sheet1!D5]と入っていてシート1のD5に日付(数値)が入るなら シート1のD5の数値は休みの日はマイナス値にする。 シート2のD5の表示形式を数値:負の値は[符号なしの赤文字] にするとか シート1のD5の数値は休みの日はマイナス値にする。 シート2のD5の表示形式をユーザー定義で[0;0]にし、 条件つき書式の条件を[セルの値が][次の値より小さい][0] にするとか。 シート1のD5とシート2のD5の関連性がわからないと 答えづらいのですが。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
6ヶ月?のカレンダーの日にちをどういう風に作ったのか書いてなくて、質問するのは、質問として非常識(具体的に回答が難しい)と思うが、考え方の参考になるかと思って下記を挙げてみる。主旨を汲み取って応用してみてください。 ーー 例データ C7:I11 2008/7/1 2008/7/2 2008/7/3 2008/7/4 2008/7/5 2008/7/6 2008/7/7 2008/7/8 2008/7/9 2008/7/10 2008/7/11 2008/7/12 2008/7/13 2008/7/14 2008/7/15 2008/7/16 2008/7/17 2008/7/18 2008/7/19 2008/7/20 2008/7/21 2008/7/22 2008/7/23 2008/7/24 2008/7/25 2008/7/26 2008/7/27 2008/7/28 2008/7/29 2008/7/30 2008/7/31 7月の休館日の日にちを縦列に入力(L列) 規則性がなければ、自分で休館日を表にするほか無い。 L1:L7 1 3 8 10 17 23 26 ーーー C7:I11を範囲指定 書式ー条件付き書式ー数式が =NOT(ISERROR(VLOOKUP(DAY(C7),$L$1:$L$8,1,FALSE))) 書式をパターンー淡い色設定で実験(フォント色でも同じ) OK ーーー 結果 L列の日のセルが色が付きました。 ーー 上記は2007/7/1を火曜(第3列)から始めていないなど、時間がないので手抜きはあるが、VLOOKUPでやれるという例を示したもの。 L列に当たるものは6ヶ月6列必要です。 条件付き書式も6ヶ月6箇所設定する必要があるが。 ーー L列を年月日の表にすれば6ヶ月か1年分の休館日を1列に定義して 1回(6か月分範囲指定して)の条件付書式の設定で済むと思う。 上記中途半端だが、主旨はわかって、もらえるだろうか。 しかしこの課題は質問者には難しすぎるかもしれない。
お礼
不十分な説明であったのにしっかりしたアドバイスを有り難うございます。いただいたアドバイスも私にはすぐに理解できないですが、始めて目にする関数に大きなヒントが含まれているような気がします。腰を落ち着けて勉強してみます。
- hallo-2007
- ベストアンサー率41% (888/2115)
>職員でも理解できないような振り替えが行われるため条件付けに考えが及びません 取り合えず、休館日のカレンダーを作る必要がありますね それが シート1でしょうか? シート1のA1に日付 1月1日 B1に=IF(WEEKDAY(A1)=3,"休","") といれてA1とB1を下フィルして1年分のカレンダーでも作成します。 取り合えず火曜日に 休 と入ります。 祝日と特別な休館日に 手入力 で 休 と入れていきます。 A~Bを選択して 名前 定義 で 休館日 とでも名前をつけます シート2(プリントのためのシート?)の日付の部分を選択して 条件書式 値が を数式が に変えて =VLOOKUP($E1,休み,2)="休" ($E1は選択した範囲の一番最初のセルの番地です) 書式で パターン で 色を選択 OK ではダメでしょうか。
お礼
早々のアドバイス有り難うございます。質問内容に不備が多く申し訳ありません。私が作った分は今のところ2シートで構成しています。一つはプリント専用の6ヶ月分のカレンダーが表示され、3ヶ月分のカレンダーが横に並び、その下に続く3ヶ月分が横に並んでいます。1ヶ月分のカレンダーの表示は7列に各曜日、その下の行から6行に日付が入るようになっていて、所定のセルに年度の数字と該当年度の4月1日の曜日(日なら1、火なら2・・・)とプリントする6ヶ月分の期間(4~9なら1、7~12なら2、・・・)と数字を入れると、残る一つのシートからプリント専用頁の表に自動的に年度と日付が読み込まれるもので、初歩的な関数だけでできていて、埋め込んだ関数などを誰かが誤操作して消したりすると困るので非保護セルは最小限度に治めるつもりです。 そして残る一つの課題が休館日の表示なのですが、アドバイスいただいたことを参考に勉強してみます。有り難うございました。
- mitarashi
- ベストアンサー率59% (574/965)
A No.2です。見直したらタイトルには「文字色」とありますね。If文のところを、下記と差し替えてください。 If myCell.Font.ColorIndex = 3 Then .Range(myCell.Address).Font.ColorIndex = 3 昼間見た自社のカレンダーの休業日が赤色セルになっていたので、それと同様に思いこんでおり、失礼いたしました。
- mitarashi
- ベストアンサー率59% (574/965)
マクロで行う案です セルの色を変えてもWorksheet_Changeeのイベントは起こらないので、Sheet2を見るときに変わっていれば良いだろうと、Worksheet_Activateのイベントを用いた例です。他のシートから、Sheet2に移った時に実行されます。Sheet2のシートモジュールに記述します。 Private Sub Worksheet_Activate() Dim myCell As Range With Me .Unprotect For Each myCell In Sheets("Sheet1").UsedRange.Cells If myCell.Interior.ColorIndex = 3 Then .Range(myCell.Address).Interior.ColorIndex = 3 Next .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End With End Sub <念のため、シートモジュールへの貼り付け方> ALT+F11でVBE画面に切り替え、たいてい左上にあるプロジェクト-VBA Projectというフレーム?で、Sheet2(例えば)をWクリックし、右側に表示されるメインの広いフレームに貼り付けて下さい。
お礼
アドバイス有り難うございます。マクロのことは勉強したことがないのですが、いずれはと思っていましたから、これを機に勉強してみます。
お礼
早々のアドバイス有り難うございます。超初心者なので私の考えが甘いかもしれませんが「マイナス値」はドンピシャのような気がします。やってみると意外に難しいかもしれませんが、他のことでも応用できそうですから是非試してみます。