なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:月齢を指定してカウプ指数を計算する

子どもが産まれたばかりなもので、カウプ指数から肥満度を計算するのに数式でどうやるか考えてみた。

カウプ指数の計算は、BMI値と同じなんだけど判定基準が異なる。なので月齢に応じた対応表がまずは必要になる。

こういう表を作る時に注意したいのは、「後でどういう計算をするか」を先に考えてから作るってこと。時々ネットで見つけた表を見たまんまで作ってから「さて、どうしようか」と悩み出す人がいる。後で計算に使うんだから「生後3か月~16ヶ月未満」みたいな文字列で書いてしまってはいけない。計算に使うなら「数値で入力」「単位は統一」は絶対。後者については小学校の算数で習ったはずなのに、大人になると忘れてしまう人が結構いる。

これ絶対。「ヶ月」も表示形式のユーザー定義で表現しよう。

今回は判定表にテーブル書式(テーブル名「T_判定表」)を設定しているけど、テーブル書式の先頭行は必ず文字列になってしまうので「見出し行」はあえて非表示にしている。

対応表ができたら、次は判定表を用意する。これも文字列だけだと使いづらいかもしれないので、必要あろうがなかろうが横に数値を入れておこう。少なくとも入れて損することはない。

ここまでできたら最後に計算表を作る。

Z3に月齢、Z4に体重、Z5に身長を入力するセルを用意する。分かりやすいようセルに名前定義しておこう。

カウプ指数BMI値)
=IF(COUNT(月齢,体重,身長)<3,"",ROUND(体重/身長^2*10,0))

続いて判定。せっかくテーブル書式を設定しても、古いバージョンだとこういう時、ところどころセル番地での参照が入ってしまう。

判定
=IF(     OR(月齢<3,月齢>60),     "測定範囲外",     INDEX(         W4:W8,         INDEX(             B4:T10,             MATCH(月齢,A4:A10),             MATCH(カウプ指数,B3:T3)         )     ) )

Microsoft365ならこんな感じで範囲を指定できるので便利。

判定(Microsoft365の場合)
=IF(     OR(月齢<3,月齢>60),     "測定範囲外",     INDEX(         T_判定リスト[判定],         INDEX(             DROP(T_対応表,2,1),             MATCH(月齢,DROP(TAKE(T_対応表,,1),1)),             MATCH(カウプ指数,DROP(TAKE(T_対応表,1),,1))         )     ) )