• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セルの文字色の変更)

セルの文字色の変更

このQ&Aのポイント
  • EXCEL2010で作成している入退院台帳のC列に退院年月日を入力すると自動でフォントの色が変わる方法はあるか
  • C列のフォント色を手動で変えなければならない問題を解決する方法を教えてください
  • C列に=today()関数を入れない方法で退院年月日を入力しても入院日数が動き続ける不具合が発生しています

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.3です。 >ただ、年齢のところで計算式を貼り付け、[誕生日が入力されているセル]をセル番号に変えてたのですが、エラーが出てしまいました。 >引数が足りないとか多いとかです。  申し訳御座いません。 =IF([誕生日が入力されているセル]="","",IFERROR(DATEDIF([誕生日が入力されているセル],TODAY(),"Y"),"(入力値無効)")) とすべきところを「)」が1つ抜けておりました。 >また、この場合、退院した時点で年齢は止まりますでしょうか?  いいえ、患者の「現在の年齢」を表示させる事が目的だと思って考えた関数ですので、止まりません。  退院した時点で年齢のカウントを止めるのでしたら、次の様な形式の関数として下さい。 =IF([誕生日が入力されているセル]="","",IFERROR(DATEDIF([誕生日が入力されているセル],IF(OR(SUM([C列のセル])<1,[C列のセル]>"9999/12/31"+0),TODAY(),[C列のセル]),"Y"),"(入力値無効)")) >お願いなのですが、 >>「DATEDIF関数の『後ろの方の日付』の所で参照する値を、『C列に日付が入力されている場合』にはその日付を、『C列に日付以外の値が入力されている場合や、何も入力されていない場合』には、TODAY関数の結果を、それぞれ参照する様にする」という関数にしてしまった方が良いと思います。 >の部分の考え方は良くわかりましたが計算式のどの部分にあたるのか、教えていただけませんでしょうか?  「DATEDIF関数の『後ろの方の日付』の所で参照する値」とは、 DATEDIF(B174,C174,"D") の中で「C174」と記述されている箇所の事です。  一方、「『C列に日付が入力されている場合』にはその日付を、『C列に日付以外の値が入力されている場合や、何も入力されていない場合』には、TODAY関数の結果を、それぞれ参照する様にする」というのは、前述の「C174」と記述されている箇所を、次の様な形式のIF関数に差し替えるという事です。 IF([C列に日付が入力されている場合にTRUEを返す判定式],[C列のセル],TODAY()) 或いは IF([C列に日付が入力されていない場合にTRUEを返す判定式],TODAY(),[C列のセル])  回答No.3で提示させて頂いた関数 =IF($B174="","",IFERROR(DATEDIF($B174,IF(OR(SUM($C174)<1,$C174>"9999/12/31"+0),TODAY(),$C174),"D")+1,"(入力値無効)")) の中で上記の「『C列に日付が入力されている場合』にはその日付を、『C列に日付以外の値が入力されている場合や、何も入力されていない場合』には、TODAY関数の結果を、それぞれ参照する様にする」に該当するのは IF(OR(SUM($C174)<1,$C174>"9999/12/31"+0),TODAY(),$C174) という箇所です。  このIF関数の判定式は OR(SUM($C174)<1,$C174>"9999/12/31"+0) というものになっております。 C174セルに何も入力されていない場合や、「入院中」などの様な何らかの文字列データが入力されている場合には、SUM($C174)の部分の計算結果は0になりますから、 SUM($C174)<1 の判定結果はTRUE(「条件に合う」という結果)になりますので、OR( )の部分の判定結果もTRUEとなるため、IF関数の[真の場合]の所に記述されている TODAY() の結果が返されます。  又、Excelでは日付を扱う際にはシリアル値という概念が用いられており、通常では整数値の1を日付の1900年1月1日として扱い、1900年1月2日は数値の2、1900年1月3日は数値の3・・・という具合に日付や時刻のデータを1899年12月31日の午前0時から経過した日数に対応させた数値を使って処理しております。(例えば2016年5月1日の午前6時のシリアル値は42491.25になります)  マイナスの数値や西暦9999年よりも後の日付はExcelでは日付として扱う事が出来ません。  そこでその様な日付として扱う事が出来ない様な数値がC174セルに入力された場合には、 SUM($C174)<1 か $C174>"9999/12/31"+0 のどちらかの判定結果がTRUEとなりますから、その様な場合にはOR( )の部分の判定結果もTRUEとなるため、IF関数の[真の場合]の所に記述されている TODAY() の結果が返されます。  一方、C174セルに日付が入力されている場合とは、C174セルに1以上で「西暦9999年12月31日に該当するシリアル値」以下の数値が入力されている場合なのですから、 OR(SUM($C174)<1,$C174>"9999/12/31"+0) の判定結果はFALSE(「条件に合わない」という結果)になりますので、IF関数の[偽の場合]の所に記述されている $C174 の結果が返されます。

hotspa60
質問者

お礼

kagakusukiさん、ご丁寧な返答本当にありがとうございます。 厚かましいお願いにも関わらず、丁寧な返答をいただき、感謝いたします。 とても分かりやすく勉強になりました。 年齢の計算式もそのまま貼り付けて使用することが出来ました。 お陰様ですべて解決することが出来ました。 >申し訳ありません とんでもないです。 こちらこそ厚かましいお願いをしたりして、大変に申し訳ありませんでした。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#2です。 入院日数は、today()から入院日付(人が入力する)を引けば自動的に出るように思ったのでしょうが、退院して退院日が決まった段階(その日の当日に限る)で、VBAでも使わないと、自動的に日付を固定するのがむつかしい。 ーー 参考 PC21 / セルの計算式を消して結果の値だけを残す https://www.google.co.jp/#q=%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB+%E9%96%A2%E6%95%B0%E5%BC%8F%E3%82%92%E6%B6%88%E3%81%99 ーー したがって (1)入院日ーー>入院日に入力(B列とする) (2)入院中は、「述べ入院中日数」ということで、=TODAY()=入院日のセル       -->=TODAY()ーB1 書式を数値に設定 入院日数は、退院日―入院日の日数の引き算に+1が正しいかも業界の慣習や常識で対処)。 (3)退院したときに、退院日を、退院日列に入力する。これは避けられないと思う そして ーー>C列に入力 (4)(2)の式を =IF(D1="",TODAY()-B1,D1-B1) のように(始めから)しておく 例 A1:B4 氏名 入院日 入院日数 退院日 田中 2016/4/1 33 2016/5/4 入院日の入力が遅れると、その間中は、間違った入院に数を表示してしまう。 入力したら正しい入院に数になるが、間違った期間中の弊害はないのかどうか、職場や個のデータの使い方によるだろう。 ーー 退院した人の行の一部か全部の列を、色図けするなら、退院日が空白でなければ、その行に色を付ければよい。 これは典型的な「エクセル 条件付き書式」の機能でできる(設定操作はご存じだろうから略)。  

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 入院中の患者、即ち「まだ退院してもいない患者」の退院年月日欄に=today()関数で、今日の日付を入れているのでは、その患者は入院中であるのにもかかわらず今日退院した事になってしまいますので、それはおかしな話です。  ですから、「C列に=today()関数が入っている場合には文字色を使って今日の日付が見えない様にする」のではなく、文字色は変えずに「DATEDIF関数の『後ろの方の日付』の所で参照する値を、『C列に日付が入力されている場合』にはその日付を、『C列に日付以外の値が入力されている場合や、何も入力されていない場合』には、TODAY関数の結果を、それぞれ参照する様にする」という関数にしてしまった方が良いと思います。  ですから、D174セルに入力する関数を次の様にされると良いと思います。 =IF($B174="","",IFERROR(DATEDIF($B174,IF(OR(SUM($C174)<1,$C174>"9999/12/31"+0),TODAY(),$C174),"D")+1,"(入力値無効)"))  因みに、上記の関数では、C列に入力されている日付よりもD列に入力されている日付の方が古い日付となっている場合や、D列に日付が入力されていない状態でC列に未来の日付(TODAY関数の結果よりも後の日付)が入力されている場合には、「(入力値無効)」と表示される様になっております。  それと、 >(ちなみにC列を参照してG列で年齢も計算しています) の件に関しましても、その場合参照する値として必要になるのはC列の「退院日」などではなく、「現在の日付」なのであり、現行ではC列のどのセルを参照した場合でも「=today()関数の結果」という全く同一の値を参照しているのですから、態々、C列の値を参照する必要は無く、単純にそのG列の関数において参照先としてC列のセルのセル番号が記述されている箇所を、TODAY()に置き換えてしまった方が良いと思います。 =IF([誕生日が入力されているセル]="","",IFERROR(DATEDIF([誕生日が入力されているセル],TODAY(),"Y","(入力値無効)"))

hotspa60
質問者

お礼

kagakusukiさん、ご回答ありがとうございます。 計算式や図まで入れて頂き、とても分かりやすい説明に感謝いたします。 入院日数に関してはkagakusukiさんのおっしゃる通り、計算式をそのまま拝借してセル番号を変えたらうまくいきました。 ありがとうございます。 ただ、年齢のところで計算式を貼り付け、[誕生日が入力されているセル]をセル番号に変えてたのですが、エラーが出てしまいました。 引数が足りないとか多いとかです。 また、この場合、退院した時点で年齢は止まりますでしょうか? 再度の質問で恐縮ですが、よろしくお願いします。 それと、とても厚かましいお願いなのですが、 >「DATEDIF関数の『後ろの方の日付』の所で参照する値を、『C列に日付が入力されている場合』にはその日付を、『C列に日付以外の値が入力されている場合や、何も入力されていない場合』には、TODAY関数の結果を、それぞれ参照する様にする」という関数にしてしまった方が良いと思います。 の部分の考え方は良くわかりましたが計算式のどの部分にあたるのか、教えていただけませんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問に答える前に、 >C列には  =totay() という関数が入っていて入院日数を計算しています。 の箇所がおかしいように思いますが。 TODAY()関数は、明日になれば、明日の日付が入る(に変わる)関数のはずで、この値を使って計算しておくと、明日になると、自動的に1日増えてしまいませんか? 私の質問の読みの勘違いだったらすみません。 退院した日で、入院日数は固まるはず。翌日には+1されるようではおかしいのでは。 TODAY()関数を使う必要なケースも、もちろんありますが。 参考までに、今日現在で入院が何日になるかを表示しているのですか?。 ーー それとある患者1人のデータは1行にまとまっているのですか。これは肝心な点です。 それなら、本当の退院日がどこかに入るなら、その行のその実際退院日の列が入力されたら (空白セルでないなら)、考えている列の1セルのフォント色を黒色やその他色に設定すれば仕舞い。条件付き書式の機能でできそうに思う。 ーー しかしセルの数式として、TODAY()関数が入っているかどうかは、(条件付き書式の「式が」で)エクセルの関数で判定出来る関数は無い。エクセル関数は、セルの「値!」しか有無・比較・判定や加工ができない。書式や数式(本件はこれ?)やコメントなどは対象外。だから条件付き書式は使えないと思う。VBAなら書式判定できるが、その後変化したときに、自動的に、常時自動変更反応がむつかしいと思う。 この点(エクセル関数は書式を相手にしない)の認識があいまいなままの、エクセル関数遣いの人が多いように思う。 ーー また質問例に=IF(B174=0,"",DATEDIF(B174,C174,"D")+1) などと第174行の例を挙げているが、その必要ないでしょう。1-10行目などの例にすべきだ。 ーー 普通は ・」退院日付を入れる列と ・現在までの在院日数(TODAY()関数を使う)は 別列とするとおもう。 これが解決策ではないか。 そうすべきと思う。そうすれば退院日の空白かどうかを、条件付き書式の条件にできると思う。

hotspa60
質問者

補足

imogasiさん、ご回答いただきありがとうございます。 説明が下手で申し訳ありません。 入院日はB列、退院日はC列、入院日数はD列になります。 そこで、退院した日付をC列のtoday関数の入っているところに入力すると、today関数が消えて日付が入るので、退院した時点で入院日数のカウントはとまり、退院までの入院日数がでます。 また、入院日数の数字を表示するのはD列になるので、 D列に =IF(B174=0,"",DATEDIF(B174,C174,"D")+1) という関数を入れて計算しています。 ちなみに、174行の例を挙げたのは、表の最後に入力されている部分を使ったため、このような例になってしまいました。 説明がわかりずらくて申し訳ありません。 現在入院している人と退院した人の両方の日数を計算しています。 現在入院中の人は現在の日数。退院した人は退院した時点での入院日数が表示されるようにしています。 また、患者1人のデータは1行にまとまっています。

全文を見る
すると、全ての回答が全文表示されます。
noname#228894
noname#228894
回答No.1

条件付き書式を使えば良いのでは? 解説 http://www.becoolusers.com/excel/conditional-formatting.html これを使ってC列が空欄かそうでないかでフォントの色を変えるわけです。

hotspa60
質問者

お礼

randensai2さん、さっそくの回答ありがとうございます。 条件付き書式はあまり使ったことがないので詳しいことはわかりませんが、C列にはすでにtoday関数が入っているので、条件付き書式だと空欄にならなずに文字が見えてしまうんです。 回答、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelの時間計算(年・月・日 別々のセルで…)

    Excelの時間計算で悩んでいます。 2つの異なる日付(年、月、日別々のセルに入力したもの)の 日数の差を関数で表示させたいのですがうまく行きません。 例えば、 A列にスタート年、B列にスタート月、C列にスタート日、D列にエンド年、E列にエンド月、F列にエンド日を入力し G列にエンド年月日-スタート年月日の日数させたいと考えています。 +----A----B----C----D----E----F----G 1   2008      2      1   2008      2     28     24 G1にDATE(D1,E1,F1)-DATE(A1,B1,C1)の数値を表示させたいのです。 ひとつのセルに日付形式で年月日を持たせれば DATEIF関数で実現可能なのは判りましたが 運用上、年月日を別のセルにして管理したいと考えています。 どなたかお解りになる方、いらっしゃいませんでしょうか。

  • エクセルの関数(AVERAGE)について質問です。

    エクセルの関数(AVERAGE)について質問です。 エクセル2007を使ってこのような、表を作りました。     A     B     C      D 1  入院日   退院日  在院日数   区分 2 2010/3/2  2010/5/8  68     (1) 3 2010/4/18  2010/5/9  22     (5) 4          … と、100行分まで表があります。 Cの『在院日数』は「退院日-入院日+1」で計算します。 計算式は『=IF(B1="","",B1-A1+1)』といれてみました。 在院日数を求めるのはこれでうまくいくのですが、 問題は、この在院日数の平均を求めることがうまくいかないのです。 以前、エクセル2003を使っていたときは 普通に『=AVERAGE(C2:C101)』でうまくいっていたと思うのですが エクセル2007にしてからは 空白のセルも、計算式が入っているせいか、数値があると認識してしまうらしく 80行までしか入力されていない時は、81から100行までの分を0と考え 1行目から100行目までの値を足し、100でで割られた値が出てきてしまいます。 どうしたら、空白のセルは計算せずに平均値を出すことが出来ますか? それと、もう一つ質問があり 区分では、(1)~(8)を入力するのですが この、区分の(1)と(3)だけを選んで平均値を出したい ということもしたいのですが どうしたらよいでしょうか? (1)だけなら、AVERAGEIFを使えばと思うのですが (1)と(3)という時は、どういう風にしたらいいのか教えて下さい。

  • エクセルのセル参照

    エクセルで隣にくるセルを参照したいのですが、どうすればよろしいでしょうか。 F列に計算式を入れるのですが、C、D、E列を非表示にした場合、B列の値を取ってくる。というような感じです。 それが、D,E列を非表示にした場合はC列の値を取ってくるみたいな感じで、自動的に隣のセルとして認識してくれる関数みたいなのはありますか。

  • エクセルのIF関数で隣のセルの文字を参照させたい

       A 1 1+2+3 2 1+2+4 3 1+2+5 A列にこのような文字が入力されてる場合にB列に IF(C1+C2+C3<A14,C1+C2+C3,0) このような計算式を作りたいのですが いままでは、計算式をコピーして一つずつ手作業で編集していたのですが、もっと簡単な方法はありませんでしょうか? つまり、A列にある文字にIF関数とCをつけて参照させるなんてことは可能なのかというこのなのです。 あまり例の無いことかもしれませんがお教え願えませんでしょうか?

  • INDIRECT関数で隣のセルの値を参照させるとエラー値#REF!が@excel(エクセル

    エクセル初心者です。 「月次」というシートのC列に計算式が入ってるとします(←DATE関数とMONTH関数、IF関数の組み合わせ)。C列の見た目は、C1が1、C31が31、のように、縦に1~31の数字が入っているように見えます。 例えば、B1に月の数字を入れると、C列の数字がその月に対応して見た目が変わります。例えばB1が7月だとC列は31日まで表示され、2月だと28日まで、のような感じです。でも、計算式は31日分入っているので、例えばC31は、月によって、見た目がブランクになる場合と数字になる場合とがあります。参考ページ:http://kokoro.kir.jp/know/calendar2.html ここで隣のD列に、見た目でC列に数字が表示されてるときは、別シートの数字を返したいとします。その参照させたいシートは31枚あり、例えば「1」というシートのD5の値を、「月次」のD1に返したい、という意味です。ただ、見た目でC31がブランクのときは、D31には何も返さず空白にしたいのです。 参照させたいシートが31枚あるため、オートフィル機能を使いたく、そこで、INDIRECT関数を使ってやろうとしてるのですが 参考ページ http://www.relief.jp/itnote/archives/001697.php 上記のとおりやろうとすると、「月次」のD列に#REF!がでます。 (エラーの出る計算式:INDIRECT(C1&"!D5")」 試しに「月次」のK列あたりに、1~31まで手入力して数字をいれ、そのセルを参照させるとうまくいくのですが、 (この場合の計算式:INDIRECT(K1&"!D5")」 ただ、30日の月や28日の月もあり、毎回K列を変えないといけないので、何とかC列を参照させたいのですが、何かよい解決方法はないでしょうか?

  • エクセルによる文字とゼロが入ったセルの合計

    宜しくお願い致します。 下記のように「0」と文字が混在混在して 入ってます。     列     A  B   C   D(合計) 行  0   0   0   0・・・D1(=SUM(A1:C1))     -   -   -   0・・・D2(=SUM(A2:C2))     0   0   -   0    セルD1とD2ともに、sum関数で合計を出すと 「0」が出てしまいます。 私としては、 D2を「-」と表示したいのですが、 どのように計算したらよいでしょうか? 宜しくお願い致します。  

  • セルを参照させる関数について

    C列には関数で返ってきている値が入っています。(たとえば単純にC1のセルには=SUM(A1:B1)と入っている)そのままC1を横にドラッグしてコピーするとD1のセルには単純に=SUM(B1:C1)となりますが、見に行くセルをC2に、E1のセルの参照するセルはC3を。。。という風に参照させるにはどんな関数を使用すればいいのでしょうか? (単純にD1のセルに=C2と設定はしたくないのが前提です)

  • 参照セルの式を文字として取得するには

    あるシートのB列に下記の書き込みがしてあります。  A B 1    =単価!C5 2    =単価!C2 3    =単価!C6 4    =単価!C4 セルA1に関数で"単価!C5"と文字で取得したいと思っています。 どなたか教えてください。 A列は同じシートの別な列を参照するのですが、B列の参照セルの行番号は同じにしたいのです。

  • Excelで色のついたセルの文字列を変更したいです。

    今、Excelを使って評価表を作っています。 その中で各項目の上位数値のセルに分かりやすく色をつけているんですが、 そのデータをHTML化するので、その項目を同じように強調したいのです。 分かりやすく示すと、 名前 *1 *2 *3 *4 *5 (回) Aさん 86 65 87 54 98 Bさん 77 55 54 87 88 Cさん 45 87 90 76 76  ・  ・  ・ こういうものであれば、各回のトップ10まで数値のセルに色をつけます。 そしてその色のついたセルに 『<font color=red>数値</font>』(数値には1回目であればAさんの86)としたいのです。 少しの量であれば手打ちで変更してもいいのですが、 今では色の付いた項目が結構な量なのでなかなか難しいものがあります。 そこで、何か関数や式を使って色の付いたセルがあれば一括して セルの書式を『数値』から『<font color=red>数値</font>』に変更する方法はないでしょうか? 分かりにくい説明で申し訳ありませんが、分かる方がいましたらお願いします。

  • exelでセルの個数を数えたいんですが…

     どなたか教えて下さい。エクセルでセルの個数を数えたいんですが、普段私が使っているのは、COUNTA関数で十分だったんですが、これは文字、数値、数式などが入っていれば数えてしまいますよね。下のような表があった場合の数式が入っているセルを数えないようにする関数ってあるでしょうか? B2~B4、D2~D4、F2~F4まで全て数式が入っています。数字は別表から関数を使い出した数字です。それぞれB2~B4、D2~D4、F2~F4の数字の入っているセルの個数を計算したいです。A,C,D列には一連番号が入っています。)   A   B   C   D   E   F 1 番号     番号     番号   2 1   2   4   1 7 3 3 2       5   4    8 4 3   2  6       9   1  宜しくお願いいたします。

専門家に質問してみよう