如何在电子表格中说明多种药物摄入量?

问题描述 投票:0回答:1

尽管听起来很痛苦,但我的任务是实现一个电子表格来计算药物吸收和消除半衰期。我实际上使用 LibreOffice Calc,但在 Excel 中测试的解决方案也会对我有所帮助(因为无论如何它可能是可移植的)。

我的电子表格目前如下所示:

它必须考虑多剂量摄入(即 D 列中的任意新条目)。例如,要使用此电子表格的人需要每 56 小时服用新的 50 毫克剂量的药物。

为了在 C 列上编写工作公式,我遵循了许多步骤:
(所有示例均针对C3;C2手动设置为

0

  1. = ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + D2 * J$2
    - 这确实考虑了多剂量摄入,但没有考虑吸收时间。相反,它会在 C3
    (8 小时后)
    上返回 50,在 C4
    (16 小时)
    上返回 48.577,(...) 以及在 C27
     上返回 
    25.000(192 小时,或 1 个半衰期) )等。换句话说,血液中的药物浓度立即升高。相反,根据 H2 中的“达到 Cmax 的时间”,它应该线性上升。

  2. = 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 )
    - 这会计算随时间推移的吸收量,它会线性上升,直到在 C16
    (112 小时)
    中达到 50,然后保持在那里。它与上一个公式不同,因为该公式查找 D 列中输入的最后一个值(使用 INDEX 和 MATCH 的组合)。但是,正因为如此,它不再考虑多次摄入——仅考虑最后一次。

  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 )
    - 返回过去 8 小时(1 行)期间吸收的药物量。即,C3 是
    3.704
    ,C4 也是
    3.704
    ,(...) C15 (104 小时) 也是
    3.704
    ,而 C16 (112 小时)
    1.852
    ,C17 及以下是
    0
    (假设除了D2之外没有其他剂量摄入)。它和前面的公式有同样的缺点。

  4. = ( 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更新:
  5. 我对上面的步骤3提出了性能改进,形式为:
  6. = 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 )

    但是,这个公式仍然没有考虑随后的剂量摄入量
  7. ,无论如何都不正确。 IE。如果我在单元格 D9 中输入新值
50

,单元格 C10 中的值应该会增加,但事实并非如此。 经过深思熟虑并寻求帮助其他地方

后,我仍然不知道如何做到这一点。

有人可以帮忙吗?

作为补充说明,本例中的药物是环戊丙酸睾酮 (TC),以肌肉注射形式给药,“T / TC 比率”是指 TC 上存在的睾酮 (T) 的比率,我不知道”真的不知道该比率是否实际上是 1。“达到 C

max
的时间”是药物在血液中达到最大浓度所需的时间。

我被告知吸收可能不完全是线性的,当达到 Cmax

时药物可能不会 100% 被吸收,这意味着在此之后其中一些药物将继续被吸收;尽管如此,我可以假设它是线性的,并且在 C

max 处被 100% 吸收,因为对于要使用电子表格的人来说,这是一个足够好的近似值。 我将电子表格放在 Google 云端硬盘上,以便其他人更轻松地帮助我。

试试这个:

libreoffice-calc
1个回答
0
投票

将其保留在一列中(我放在 J 列中),您只需要做一个循环即可。

Public Function Concent(Time_Origin As Long) Dim Cycle As Long Dim i As Long Dim j As Long Dim Items(10000) As Long Dim Intake(10000) As Long Dim Concent_1mg(2152) As Double j = 0 Cycle = Time_Origin / 8 + 7 For i = 6 To Cycle If Cells(i, 4) <> "" Then Items(j + 1) = i Intake(j + 1) = Cells(i, 4).Value2 j = j + 1 End If Next For i = 1 To 2147 Concent_1mg(i) = Cells(i + 5, 10).Value2 Next For i = 1 To j Concent = Concent + Intake(i) * Concent_1mg(Cycle - Items(i)) Next i End Function

一旦完成,只需调用此函数即可计算自起始点以来的时间浓度。

© www.soinside.com 2019 - 2024. All rights reserved.