[[20161206232706]] 『条件付き書式の設定方法』(Die) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付き書式の設定方法』(Die)

A列に"4月"といった形で月が入っており、今月の月と比較して、今月と同じか古い月だと赤い文字で
月が表示されるように条件付き書式を設定しようとしています。
(例えば、今月だと"12月"なので、"4月"だと赤く表示される。)

この条件だけだと、データが2行目から始まるとすると、範囲を選択してから、条件付き書式の
数式で、"=A2<=today()"と簡単に数式で表現できます。

しかし、実は年度初めが4月なので、例えば、1〜3月は来年で未来月で赤く表示しない。
4月〜12月は過去または当月なので赤く表示する、とややこしい条件を表現したいのです。

AND条件などで巧く表現したいのですが、巧い数式が浮かびません。
どうか、どなた様かお知恵をお貸しくださいませ。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 どうもよくわかりません。

 >>"=A2<=today()"と簡単に数式で表現できます

 ということは、(Today()は日付型の値ですから)A列の値が「日付型」yy/mm/dd で 表示書式で 4月 となっているだけだと想定されます。
 (でも Today と比較すると 日 まで 比較することになって、それはそれで へんですけど)

 でも、『難しい、ややこしい』といわれるわけですから、実は A列は、本当に文字列として 4月 とか 3月 とかで入っている?
 そうした時に、3月は 『来年だ』ということですけど、なぜですか? 今年かもしれないし、再来年かもしれないし
 10年前の3月かもしれないし、100年後の 3月かもしれない。

 A列に、どのように入っているのかを明確にしてもらいたいのと、仮に 文字列で 3月 とか 12月 とはいっているとしたら
 その 年 がいつなのか、判断するルールを教えてください。
 
(β) 2016/12/07(水) 00:17

 A列は日付データ(シリアル値)ではないとして、
 実際どうなっているのかわかりませんが、

 ・A列に入力するのは「1〜12」の数値
 ・表示形式〜ユーザー定義 0"月" 

 だとすれば条件付き書式の数式 ↓

 =MOD(A2-4,12)<=MOD(MONTH(TODAY())-4,12)

 A列の範囲内に未入力セルがあることも考慮するなら ↓

 =AND(A2>0,MOD(A2-4,12)<=MOD(MONTH(TODAY())-4,12))
 または
 =MOD((A2&"")-4,12)<=MOD(MONTH(TODAY())-4,12)

 参考まで。
(笑) 2016/12/07(水) 04:09

 今、12月の時点で考えると、 12 は今年だと考えるのが妥当ですね。
 1 や 2 や 3 は 来年だと、そう考えてもいいかもしれません。

 1月になったとします。 12 は、おそらく(おそらくです。絶対ではないです)去年の可能性が高いですね。
 1 や 2 や 3 は、きっと(これも、きっと です)今年でしょう。

 9 10 11 あたりは、どちらでもある可能性もあるのでは?

 何が言いたいかというと、登場する月の「数字」をみて、何年だと判定するルールが存在するなら、いいのですが、

 たとえば過去月は3か月までとか、先行きは3か月までとか、あるいは
 登場するデータはすべて【今年度】のデータで、年度は 4月から3月までといったような。

 そうでないなら、月の比較をする場合に、比較先、比較元ともに 年 は必須でしょうねということです。

 4 とか 11 と入れず、2016/11 とか 2017/4 と入れてもらえばいいのでは?

(β) 2016/12/07(水) 05:09


 年度が4月〜3月ということなので、
 今日が「2017年1月」だとすると、期間は「2016/4/1〜2017/3/31」、
 なので「4〜12」は2016年(前年)、

 今日が「2017年4月」になった時点で、期間を「2017/4/1〜2018/3/31」と見なす、
 と解釈して回答してます。

 念のため。
(笑) 2016/12/07(水) 05:54

 失礼しました。

 質問文の中に、「実は年度初めが4月なので」という部分があるのを見過ごしていました。

 登場するデータの範囲の制限は明言されていませんが、同一年度内のデータと解釈できますので
 笑さんの回答で、全く問題なかったですね。

 いつまでたっても、粗忽ものです。

(β) 2016/12/07(水) 06:28


返信が遅れて申し訳ございません。また、説明が足りていなかったので、そちらも申し訳ありません。

A列に「データの入力規則」を使って「1月,2月,...,11月、12月」しか入力できない状態でした。

そのため、数式として扱うため、文字列を数式化するVALUE関数と、文字列を左側から切り出すLEFT関数と、
文字列長を取り出すLEN関数を使い、"=VALUE(LEFT(A2,LEN(A2-1))"として、例えば"1月"から数字の"1"だけ取り出せるようにしました。

最終的に、頂いたMODを使うアイディアを使い、
" =AND(VALUE(LEFT(A2,LEN(A2-1))>0,MOD(VALUE(LEFT(A2,LEN(A2-1))-4,12)<=MOD(MONTH(TODAY())-4,12))"
で巧く行きました。

皆さん、どうもありがとうございました!
(Die) 2016/12/11(日) 22:24


 > VALUE(LEFT(A2,LEN(A2-1))

 ここ VALUE(LEFT(A2,LEN(A2)-1)) の間違い?
           ~~~~~~~~~
 実際の数式は ↓ だとすれば
 =AND(VALUE(LEFT(A2,LEN(A2)-1))>0,MOD(VALUE(LEFT(A2,LEN(A2)-1))-4,12)<=MOD(MONTH(TODAY())-4,12))

 まず「VALUE(LEFT(A2,LEN(A2)-1))-4」の VALUE関数はなくても同じ(注1)なので、
 LEFT(A2,LEN(A2)-1)-4 でかまわない。

 注1)文字列の数字は四則演算(この場合はマイナス4)すると数値として扱われるため

 次に、A2セルが空白の場合、LEFT(A2,LEN(A2)-1)-4 の式はエラーになる → 条件付き書式で TRUE にはならない。
 だからこの場合、A2が空白かどうかの判定は不要です。

 ちなみに単に空白かどうかの判定なら =AND(A2<>"",・・・・・・) で十分。

 ■結論
 条件付き書式の数式は

 =MOD(LEFT(A2,LEN(A2)-1)-4,12)<=MOD(MONTH(TODAY())-4,12)

 これでも同じことだと思います。
(笑) 2016/12/12(月) 07:32

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.