Excelで介護支援記録管理システムを作ってみる~4日目
前回までに、介護支援記録データのテーブルへデータを入力するさい、3つのフィールド(項目)である利用者名、実施内容、担当者名については、データの入力規則を用い、リストを使って入力することにしました。
施設の規模から、このリストには最大で30行ほどが表示され、探しにくいという欠点はありますが、すべての項目を予め覚えておかなくても良いというメリットのほうを重視しました。
ただし、利用者、職員は利用の開始中止、退職や異動という理由で常に変化するため、これを考慮して入力規則の元となる範囲をしっかり定義しなくてはなりません。
なお、利用者、職員とも、別のExcelブックのワークシート上でテーブルで管理されているため、介護支援記録を管理するブックの中に、リンクしたテーブルの形でデータを取り込んでいます。
リンク元テーブルに追加や削除などの変化があっても、このリンク先テーブルの更新を行うことで、最新情報がすぐに反映される仕組みです。
ちなみに、これらのテーブルは、介護支援記録管理システムの基礎を担う意味で、データベース用語で「マスタ」と呼ばれることもあります。
前回の投稿では、データの入力規則によるリストの対象範囲を設定するさい、これらのテーブルにフィルターをかけ、該当するものだけ表示させてから設定したとしても、残念ながら無関係なデータも含めすべてリストに出てしまうことにふれました。
下の画像はその説明となりますが、左の図は利用者テーブルにフィルターをかけ、在籍が「利用中」の方に絞ったところ。右の図は記録テーブルにデータを入力するさい、利用者名について入力規則によるリストを表示させている図です。左には表示されていない「青山麻衣」が右図のリストの中に表示されていることがわかります。
そこで関数を使ってこの問題を回避する方法を考えます。
方法論としては、マスタテーブル上の利用者のうち、入院等による退所で利用が終了した方をテーブルから除外してテーブルの外に表示させ、その上で、その名簿をデータの入力規則の範囲として設定することによって上記の問題をクリアするということです。
まず、INDEX関数とMATCH関数を組み合わせる方法を考えました。これはデータ元が別にテーブルではなくても、テーブルのような表形式のデータに対して使うことができます。
私が介護施設で働いていたとき、日誌など作成するさいのテクニックとして良く使いました。同じようにやってらっしゃる方もいるでしょう。
元データが入ったテーブルのフィルター機能に頼らない方法として有効です。
そこで、説明をわかりやすくするため、施設やデイサービスの利用者の中から、行事等の参加者を抜き出すような場合を考えてみます。
下図のとおり、左に50音順に縦に並んだ名簿があり、その右に行事に参加した方について○印を付けています。これにより○印を付けた方のみ、最後の列に詰めて表示させています。
関数による処理としては、名簿の中から○印を付けた方のみを抜き出し、上のほうから順に詰めて並べるようにする、という流れになります
まず参加したかどうかを、右隣の列で数値に置き換えます。参加○は'1'、それ以外は'0'にするためIF関数で処理します。
次に数値変換した列に対し、次の右隣の列では累計の計算を行います。SUM関数を使い、範囲はE列の最初のセル(E3)を固定し同列のE3からE18まで順に入力する形です。つまりF3セルに'=SUM(E$3:E3)'と入力し、それをオートフィルでコピーすればOKです。
その上でINDEX関数を使い、利用者名簿の範囲からMATCH関数で指定した行番号の名前を持ってきます。
中のMATCH関数に着目してもらうと、'MATCH(ROW()-2,F$3:F$18,0)'とありますが、F列の累計計算で各行に表示されている数字のうち、まず最初に'1'つまり参加の○印があったセルはF5、つまり5行目となるので、G列ではその'1'を表す'ROW()-2'の相対位置をF列から検索しています。
これは上から3番目となりますので、INDEX関数も上から3番目の行のデータを引っ張ってくるわけです。
MATCH関数の中の最後の'0'は照合の種類で、'0'は検索値と一致する最初の値を検索するという意味になり、6行目以降に同じ'1'がいくら並んでいても、その行番号の値は返しません。
同様に、F列で最初に'2、3、4'が表示された行番号を探し、名簿から名前を持ってきています。
'5'以降は存在しないため#N/Aエラーが表示されました。
このエラーをIFERROR関数で消したのが一番右のH列となります。
今回のテーマでも同様に、利用者テーブルの右外側に同じような計算フィールドを設け、利用中の方に'1'を割り当てた計算処理を行うことで、利用中の方のみ抽出したリストが作成できそうです。
しかし、この方法では別な問題があることに気づきました。
この計算フィールドはテーブルとは別物のため、利用を終了した方も含めて人数が増え、テーブルが下へと拡大していくと、計算フィールドもそれに合わせ下に広げていかなくてはなりません。最初から広げて作っておくこともできますが、ファイルが重くなってしまいます。
入力規則用リストとして抜き出す利用者の数は常に30名前後ですので、次回では、何とか利用者テーブルから直接該当者を抜き出すことができる関数の組み合わせを考えることにします。
>次回の投稿を読む