~Excel関数の式を訂正しました(2024.2.28)~
~~令和6年3月27日保医発0327第10号で選定療養費の算定方法について通知されました。通常の薬剤料と同様に特別徴収薬剤料を算定して、消費税と合わせて徴収するというものです。
これに応じて、シュミレーション時の選定療養費の算出式を改訂しました。(R6.3.28)~~
前回の記事では、2024年10月から適用される「長期収載品の選定療養」について、適用の範囲とその影響について述べました。
今回は、第2弾として選定療養が適用された場合、先発品を希望する患者の窓口負担がどの程度増えるのか?について、Excelでシュミレーションする方法を考えたいと思います。
イメージとしては下図のような感じです。
このシュミレーションを実現するには、いくつかのExcelテクニックを組み合わせて、元データの加工、関数処理、リスト処理などを行います。
手っ取り早くシュミレーションファイルを使いたい、という方はこちらから↓↓
【ダウンロード】選定療養費シュミレーション用ファイル - 調剤薬局業務をExcelで快適に PharmaDataLabo (hatenablog.com)
元データの入手
薬価収載品のリストは診療報酬情報提供サービス (mhlw.go.jp)から入手します。
サイトにアクセスし「医薬品マスター」をクリックするとZIPファイルがダウンロードされます。(通常は「PC」>「ダウンロード」フォルダに保存されます)
このZIPファイルを開くと、「y」という名前のCSVファイルが入っています。
この「y」が元データです。
令和6年3月からファイル形式(内容)が変更になり、それに伴いファイル名称も変更になっています。現在公開されている令和6年4月適用の医薬品マスターについては
新 レ イ ア ウ ト の フ ァ イ ル 名 「 y20240305.csv」
旧 レ イ ア ウ ト の フ ァ イ ル 名 「 y20240305Pre.csv」 となっています。(R6.3.18追記)
この元データから今回利用する項目は、
「E列」医薬品名
「L列」現薬価
「Q列」後発品
「AF列」薬価基準コード
の4列ですが、残念ながら項目名は表示されていないので、しっかり確認することが大事です。
列を確認したら、この4列を選択し新しいシート(またはブック)にコピペして、列幅を適宜調整するとその後の作業が分かりやすくなります。
このリスト内の「C列」では、後発品であれば「1」、それ以外は「0」となっています。
元データの加工
4列に絞った元データから、必要な情報を抽出できるように関数を組み合わせて処理を施します。これが、最も重要かつ肝です!
ある品目が後発品のある先発品であり、対応する後発品のうち最高薬価を把握できれば、あとは算数レベルの関数で処理できるはずです。
それでは処理を始めましょう。
項目行を挿入し、オートフィルタを設定、ウインドウ枠の固定をする
- 1行目全体を選択し、右クリック>挿入 で項目名の行を挿入し、A列から順に、「医薬品名」「薬価」「GE」「薬価コード」などの項目名を入力
- リスト内のセルを1か所選択し、「データ」タブ>「並び替えとフィルター」>「フィルター」を選択し、オートフィルタを設定しておく
- 1行目が表示されているの確認して、「表示」タブ>「ウインドウ」>「ウインドウ枠の固定」>「先頭行の固定」を選択すると、スクロールしても1行目が表示されたままになります。
「一般名コード」、「GE最大薬価」列を挿入し、関数処理
- B・C列の間に2列を挿入する→C~D列全体を選択し、右クリック>挿入 でB列の後ろに2列挿入されます。項目名を「GE最大薬価」「一般名コード」とします。
- 一般名コードは薬価コードの上9桁で表されるので(*)、「一般名コード」のD2セルに
- 「=LEFT(9,F2)」を入力します。
- 次に、先発品の場合に、対応するGEの最大薬価を関数で求めます。C2セルに「=IF(E2=0,MAXIFS(B:B,D:D,D2,E:E,1),0)」(**)と入力します。
E2セルが「0」なら(=GE以外なら)、D列がD2セルと同じ値かつE列が「1」(=GE)であるデータのうち、B列の値の最大値を求める、という意味
- C2:D2セルを選択し、右下のフィルハンドルをダブルクリックするとリストの最下行まで関数がコピーされます。
- 関数がコピーされたら、そのまま『右クリック>「C」(コピー)>右クリック>「V」(値を貼り付け)』をして、この後の動作が軽くなるようにしておきます。
- 「GE最大薬価」に薬価金額が表示された先発品が「後発品のある先発品」となるので、C列のフィルタボタンをクリックして、「0」のチェックをはずして「OK」を押します。
- C列にフィルタがかかった状態で、A~C列全体を選択し、新しいシートにコピペすると、フィルタされて表示された行のみが新しいシートに転記されます。さらにA列のセルを1か所選択した状態で、右クリック>並び替え>昇順、とすると医薬品名列が五十音順に並びます。ここまでで元データの加工が一通りできました。
*薬価コードの説明はこちらが分かりやすいと思います→いろいろな医薬品コード - データインデックス (data-index.co.jp)
**「MAXIFS」関数はExcel2019以降で利用できますが、2016以前のVer.では別の方法で、いくつかの手間をかける必要があります。別記事で紹介しますね。
シュミレーション表の作成
参照するリストが完成したら後は表の体裁を整えて、関数処理を埋め込めばやりたいことが完了します。
イメージとして、先発品名をドロップダウンリストから選択したら、GE最大薬価が表示されて、保険適用部分と選定療養部分の金額が分かり、1日薬剤料や30日分、60日分、90日分の薬剤料のうち、保険負担割合に応じた現行の負担金と、選定療養導入後の負担金が分かるようにしたいです。
そこで当初のような体裁を作ります。
(A~C列には前述の加工済み元データがあります)
G4セルには、ドロップダウンボックスを仕込みます。
- G4セルを選択し、「データ」タブ>「データツール」>「データの入力規則」を選択します。
- 入力値の選択:「リスト」を選択
- 元の値の枠内をクリックし選択状態にする
- A2セルを選択し、「Ctrl」+「Shift」+「↓」を同時押しするとA2から最下行まで選択状態になる(または地味にA2セルからドラッグするか、A2セルを選択しスクロールバーで最下行まで表示して、「Shift」を押しながらA列の最下行をクリックする)
- 「OK」ボタンを押す
H6セルは、1日何錠か、または外用剤なら処方全量を入力して薬剤料を算出したいので、数字が入力しやすいようにこちらも入力規則を仕込みます。
上図の②まで同じで、元の値欄に「1,2,3,4,5,6,7,8,9,10,14,28,30,56,60,63」などと入力します。(カンマは必ず半角のカンマです)
更に、任意の数字も入力できるようにして、数字以外は入力できないようにします。
- 「エラーメッセージ」タブを選択
- 「無効なデータが入力されたらエラーメッセージを表示する」のチェックをはずす
- 「日本語入力」タブを選択
- 「オフ(英語モード)」を選択
- 「OK」を選択
関数の処理
次はいよいよ関数処理を行います。と言っても、VLOOKUP関数を使う以外は、加減乗除がほとんどです。ただし、小技をちりばめて処理を簡単にしていきましょう。
まずは先発品の薬価情報を表示させます。
G4セルのドロップダウンリストから先発品を選択すると、上図のようにH4~L4セルに「薬価」「GE最大薬価」「薬価差」、薬価差のうちの「保険適用分3/4」「選定療養分1/4」を表示するための関数を入力します。
A~C列には前述の元データがあり、これを参照していきます。
H4セル:「=IFERROR(VLOOKUP($G$4,$A:$C,2,0),"")」
I4セル:「=IFERROR(VLOOKUP($G$4,$A:$C,3,0),"")」
J4セル:「=H4-I4」
K4セル:「=J4*3/4」
L4セル:「=J4/4」
次に、現行の薬剤料と改定後の薬剤料を表示します。(※)
H7セル:「=IF(H4*$H$6<10,10,ROUND(H4*$H$6-0.1,-1))」
薬価*1日用量が10円未満なら10円、
10円以上なら(薬価*1日用量-0.1)を1円の位で四捨五入する、という意味
(薬価が55円なら薬剤料は50円なので、
0.1を引けば54.9円になり1円の位を四捨五入すればOK)
☆薬剤料は剤ごとの1日薬価を五捨六入五捨五超入して求めるための処理
I7セル(GEの1日薬剤料で、負担金額を計算する際に参照するためのセル):
「=IF(I4*$H$6<10,10,ROUND(I4*$H$6-0.1,-1))」(隠し作業セル、フォント白)
H7セルと同様に後発品の場合の薬剤料を求める
H9セル:「=IF( (I4+K4)*H6<10,10,ROUND( (I4+K4)*H6-0.1,-1))」
保険適用分3/4の薬剤料の1日薬剤料を「(後発品薬価+薬価差の3/4)*1日用量」として
H7、I7セルと同様の式で求める
※はてなブログの仕様で半角カッコが二つ続くと脚注処理をされてしまうためカッコの間に半角スペースを入れましたが、このままコピペしても大丈夫です。
H10セル:「=L4*H6」 選定療養分1/4*1日用量
「=IF( L4*H6<10,10,ROUND( L4*H6-0.1,-1))」選定療養費1日薬剤料(R6.3.28訂正)
H11セル:「=H10*0.1」 1日分の選定療養費の消費税10%
(※)薬剤料の表記と計算について
通常は薬剤料など診療報酬は1点=10円として、点数で示されますが、ここでは金額の計算をしたいので点数表記を省いています。
また、五捨五超入を正確に計算する関数も作れますが、意外に煩雑になるため「実質的に」五捨五超入が計算できるようにROUND関数に工夫をしています。(0.1を引くとしたところを0.01、0.001など小さくすればするほどより正確な値に近づきます)
薬剤料の計算は『剤ごとに』『15円以下の場合:1点』『15円を超える場合:10円又はその端数を増すごとに1点を加算』となっています。
『剤ごとに』計算するので、例えば単剤では「10円」「20円」の薬剤2種が同じ剤で処方されると「20円」「30円」「40円」という感じで、常にプラスマイナス10円の幅を持って考えるといいと思います。
ここまで来たら、後は負担金額のシュミレーションをします。
この辺で小技をちりばめます。
上図では分かりにくいですが、I13、L13、O13、R13のセルに負担割合を示す、「0」「0.1」「0.2」「0.3」を入力します。見栄えをよくするためフォントの色を白かセルの背景色と同じにしておきます。
同様に、F15、F16、F17、F18のセルに日数を示す「1」「30」「60」「90」を入力して、フォントの色を白にしておきます。
手順としては、
- H15~J15セルにそれぞれ関数を入れて、
- それをH16~J18セルにコピペし、
- さらにH15~J18セルをコピーして、K15、N15、Q15セルに貼り付ける
というふうに作業すると楽ちんです。
H15セル:「=ROUND($H$7*$F15*I$13,-1)」
現行1日薬剤料*(日分)*(負担割)=薬剤料の自己負担金を1円のくらいで四捨五入
I15セル:「=ROUND($H$9*$F15*I$13,-1)
+ROUNDDOWN($H$10*$F15*1.1,0)」
選定療養導入後の保険適用分薬剤料の自己負担金をH15セルと同様に求め、
選定療養費の税込金額との和を求める
J15セル:「=ROUND($I$7*$F15*I$13,-1)」
最大薬価後発品の薬剤料の自己負担金をH15セルと同様に求める
H15~J15セルを選択して、フィルハンドルをJ18までドラッグします。
さらにH15~J18まで選択した状態で、フィルハンドルをS18までドラッグします。
これで、必要な関数の埋め込みが完了しました。
最後にスムーズな操作をサポートするための仕掛けをします。
- A~E列全体を選択し、右クリック>非表示、とします。
- I6セルに「←外用剤は処方全量を入力(ドロップダウンリストから選択するか、入力する)」とテキスト入力する。
《シートの保護》不慣れな人が操作して、関数が変更されないように「G4セル」「H6セル」以外は変更できないようにシートを保護します。
- G4セルを選択し、Ctrlを押しながらH6セルを選択、右クリック>セルの書式設定
- 開いたウインドウで「保護」タブの、「ロック」のチェックをはずして「OK」を押します。
- 「校閲」タブ>「保護」>「シートの保護」、開いたウインドウで上から2つにチェックが入った状態で、「OK」する。
以上で選定療養費の自己負担金額のシュミレーション用のシートが完成です。
ここまで付いて来てくれてありがとうございました。
何となく不安な方向けに、ダウンロードファイルを準備しました。
こちらから↓↓↓
pharmalabo.hatenablog.com