苦痛に聞こえるかもしれませんが、私はスプレッドシートを実装して薬物の吸収と排泄の半減期を計算する任務を負っています。私は実際に LibreOffice Calc を使用していますが、Excel でテストされたソリューションも役に立ちます (とにかく、おそらく移植可能であるため)。
私のスプレッドシートは現在次のようになっています。
複数回の摂取を考慮しなければなりません (つまり、列 D の任意の新しいエントリ)。例として、このスプレッドシートを使用する人は、56 時間ごとに新しい 50 mg の薬を服用する必要があります。
列 C に作業式を書き込むために、多くの手順に従いました
(すべての例は C3 用です。C2 は手動で に設定されています0
) 。
= ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + D2 * J$2
- これは複数回の摂取を考慮に入れていますが、吸収時間は考慮していません。代わりに、50
C3 (8 時間後)、48.577
C4 (16 時間)、(...)、25.000
C27 (192 時間、または 1 半減期)などに戻ります。つまり、血中薬物濃度すぐ上がります。代わりに、 H2 の「Time to C max 」に従って直線的に上昇するはずです。= IFERROR( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ); 0 )
- これは経時的な総吸収を計算し50
、C16 (112 時間)に到達するまで直線的に上昇し、その後そこにとどまります。これは、列 D に入力された最後の値 (INDEX と MATCH の組み合わせ) を検索するため、前の式とは異なります。しかし、そのため、複数回の摂取は考慮されなくなり、最後の摂取のみが考慮されます。= IFERROR( ( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) - ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) ); 0 )
- 過去 8 時間 (1 行) に吸収された薬物の量を返します。すなわち、C3 は3.704
、C4 も3.704
、(...) C15 (104 時間)も3.704
、C16 (112 時間)は1.852
、C17 以下は0
(D2 以外の摂取量がないと仮定)。前の式と同じ欠点があります。= ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + IFERROR( ( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) - ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) ); 0 )
- これが私の現在の最新式です。これは、吸収量の線形吸収と対数消去の両方を説明します。2019-10-11 更新:上記のステップ 3 のパフォーマンスを次のように改善しました
= IFERROR( ( ( IF( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) <= H$2; (B3 - B2); IF( ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ) < (B3 - B2); ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ); 0 ) ) * INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) ) / H$2 ); 0 )
。上のスクリーンショットに見られるように、更新された完全な式と現在の最新技術
= ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + IFERROR( ( ( IF( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) <= H$2; (B3 - B2); IF( ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ) < (B3 - B2); ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ); 0 ) ) * INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) ) / H$2 ); 0 )
は次のとおりです。
ただし、この式は、その後の摂取量をまだ考慮しておらず、とにかく正確ではありません. つまり、セル D9 に新しい値を入力すると50
、セル C10 の値が増加するはずですが、増加しません。よく考えて、他の場所
で
助けを求めた後でも、どうすればそうできるのか、まだよくわかりません。
誰でも助けることができますか?
追加のコンテキストとして、この例の薬物はテストステロン シピオネート (TC) であり、筋肉内注射として投与されます。「T / TC 比率」は、TC に存在するテストステロン (T) の比率を指します。比率が実際に 1 であるかどうかを確認してください。「Time to C max」は、薬物が血中の最大濃度に達するまでにかかる時間です。
吸収は完全に直線的ではない可能性があり、C maxに達したときに薬物が 100% 吸収されない可能性があると言われました。それにもかかわらず、スプレッドシートを使用しようとしている人の目的には十分な近似であるため、線形であり、C maxで 100% 吸収されると仮定することができます。
スプレッドシートを Google ドライブに置いて、他のユーザーが簡単に支援できるようにします。
ありがとう。