ITライター 立山秀利
Excelで表を作る際、毎週の営業所の定休日など、曜日に応じて表示内容を変えたいとする。この「曜日に応じて」の機能を作ることは、実は一筋縄ではいかないもの。今回はそういった機能の数式を、TEXT関数を用いて効率的に記述するワザを紹介する。
Excelで日付データから曜日を求めるには、「表示形式」機能を使うのが一般的だ。例えば図1のようなカレンダー形式の表があり、A6セル以降に日付データが入力されているとする。B6セル以降に曜日を漢字1文字で表示するには、まずはB6セルなら「=A6」など、A列の日付データをそのまま取得する数式を入力する。そして、B6セル以降の表示形式をユーザー定義の「aaa」に設定すればよい。「aaa」は日付を漢字1文字の曜日に変換する書式記号である。
図1
(画像をクリックすると拡大表示します)
このようにセルに曜日を単純に表示するだけなら、表示形式機能を使えばよいが、曜日に関するより複雑な処理を行いたい場合、表示形式機能では対応できなくなる。例えば図1の表にて、D3セルに定休日の曜日を漢字1文字で入力し、表で該当する曜日のC列「営業」のセル(C6~C24セル)に「定休日」と表示したいとする。そして、D3セルには「火」を入力したとする。
この場合、C6~C24セルにIF関数を使い、B6~B24セルの曜日がD3セルの「火」かどうか判定し、もしそうなら「定休日」と表示する数式を入力すればよい。しかし、単純にB6~B24セルとD3セルを比較する条件式では、目的の結果は得られない。実際に以下の数式をC6セルに入力し、オートフィルなどでC24セルまでコピーしても、火曜日の行のC列のセルには「定休日」と表示されない。
---------------------------
=IF($B6=$D$3,"定休日","")
---------------------------
この原因はB6~B24セルのデータにある。これらB列のデータは「=A6」などの数式によって、A列のセルのデータをそのまま取得しているため、データとしてはあくまでも日付データである。曜日の漢字は表示形式機能で表示しているだけだ。そのため、条件式で日付データとD3セルの文字列「火」を比較しても、そもそもデータの種類が違うので一致しない。
そこで利用したいのがTEXT関数である。データを指定した表示形式の文字列に変換する関数である。
引数「値」にはデータを指定する。引数「表示形式」には、目的の表示形式を書式記号で指定する。その際、文字列として指定するように決められている。例えば、日付データ「2018/12/3」を曜日の漢字1文字に変換するには、次の数式になる。
-----------------------------
=TEXT( 値, 表示形式)
---- --------
("2018/12/3", "aaa" )
-----------------------------
2019/12/3は月曜日なので、上記数式をセルに入力すると、「月」が表示される。
このTEXT関数を先ほど説明したIF関数の条件式に用いる。C6セルなら以下となる。
----------------------------------------
=IF(TEXT($B6,"aaa")=$D$3,"定休日","")
----------------------------------------
先ほどの数式から、条件式の「=」の左辺を「$B6」から「TEXT($B6,"aaa")」に変更した。これで、B6セルの日付データが曜日の漢字1文字に変換され、D3セルの「火」と等しいか比較できるようになった。このC6セルの数式をC24セルまでコピーすると、図2のように意図通り、火曜日のC列のセルに「定休日」と表示されるようになる。
図2
もし、D3セルの曜日の漢字1文字を変更すると、それに応じて「定休日」が表示されるセルが即座に変更される。
さらに条件付き書式と組み合わせれば、定休日は行の色を変えることもできる。例えば、図3の表のA6~C24セルにて、D3セルに入力した定休日の曜日に該当する行の色を薄い青にしたいとする。その場合、A6~C24セルに条件付き書式を次のように設定すればよい。
図3
(画像をクリックすると拡大表示します)
・ルール
(ホームタブのスタイルグループの「条件付き書式」をクリックして、「新しいルール」をクリックした上で)
「数式を使用して、書式設定するセルを決定」を選び、以下の数式を設定。
------------------------
=TEXT(値,表示形式)
=TEXT($A6,"aaa")=$D$3
------------------------
・書式
セルの塗りつぶし色を薄い青に設定。
これで、図4のように、定休日の曜日の行が薄い青になる。D3セルの曜日の漢字1文字を変更すると、それに応じて、薄い青となる行が即座に変更される。
図4
日付から曜日を判定するだけならWEEKDAY関数でも行えるが、今回のような条件式を作ろうとすると、CHOOSE関数などと組み合わせる必要があり、複雑になってしまう。TEXT関数を使えば、より効率的に条件式を記述することができる。
他にもTEXT関数を使うと、セル内の文字列に曜日を埋め込むことも可能となる。例えば図5のように、A1セルの日付から曜日を漢字3文字(「月曜日」など)で取得し、B1セルにて文字列「今日は~です。」の「~」の部分に埋め込んで表示できる。漢字3文字の曜日の書式記号は「aaaa」である。
B2セルの数式は以下となる。
----------------------------------------
="今日は" & TEXT(A1,"aaaa") & "です。"
----------------------------------------
図5
このようにTEXT関数を条件式に用いれば、例えば、毎週の定例会議やノー残業デーなどの曜日で判定したい複雑な処理がある場合、より効率的にスケジュールを作れるようになるだろう。
立山秀利(たてやま・ひでとし)
カーナビのソフトウェア開発、Webプロデュース業務を経て、現在は、システムやネットワーク、Microsoft Officeを中心に執筆中。 主な著書に『Excel VBAのプログラミングのツボとコツがゼッタイにわかる本』などがある。
(監修:日経BPコンサルティング)