Excel 中的药代动力学 - 如何解释多种药物的摄入量?

Pharmacokinetics in Excel - how to account for multiple drug intakes?

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

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

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

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

  1. = ( C2 * 0,5 ^ ( (B3 - B2) / $H ) ) + D2 * J - 这确实考虑了多剂量摄入,但没有考虑吸收时间。相反,它 returns 50 在 C3 (8 小时后)48.577 在 C4 (16 小时), (...) and 25.000 on C27 (192 hours, or 1 half-life), etc. 换句话说,血液中的药物浓度升高立即。相反,根据 H2.'Time to Cmax'

    ,它应该线性上升
  2. = IFERROR( ( ( INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) * J ) * MIN( ( B3 - ( INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) ) / $H; 1 ) ); 0 ) - 这会计算 吸收随时间的推移,它线性上升直到在 C16 [=65= 中达到 50 ](112 小时) 之后就住在那里。它与前面的公式不同,因为这个公式找到了在 D 列中输入的最后一个值(使用 INDEX 和 MATCH 的组合)。但是,正因为如此,它不再考虑多次摄入 - 只有最后一次。

  3. = IFERROR( ( ( ( INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) * J ) * MIN( ( B3 - ( INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) ) / $H; 1 ) ) - ( ( INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) * J ) * MIN( ( B2 - ( INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) ) / $H; 1 ) ) ); 0 ) - 此 returns 在过去 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 ) ) + IFERROR( ( ( ( INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) * J ) * MIN( ( B3 - ( INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) ) / $H; 1 ) ) - ( ( INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) * J ) * MIN( ( B2 - ( INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) ) / $H; 1 ) ) ); 0 ) - 这个我目前最先进的公式。它解释了吸收量的线性吸收和对数消除。

  5. 2019-10-11 更新: 我想出了对上面第 3 步的性能改进,形式为:= IFERROR( ( ( IF( ( B3 - INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) <= H; (B3 - B2); IF( ( ( B3 - INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) - H ) < (B3 - B2); ( ( B3 - INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) - H ); 0 ) ) * INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) ) / H ); 0 )

    更新后的完整公式和当前最先进,如上面的屏幕截图所示,是: = ( C2 * 0,5 ^ ( (B3 - B2) / $H ) ) + IFERROR( ( ( IF( ( B3 - INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) <= H; (B3 - B2); IF( ( ( B3 - INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) - H ) < (B3 - B2); ( ( B3 - INDEX( $B:$B2; MATCH(1E+306; $D:$D2; 1) ) ) - H ); 0 ) ) * INDEX( $D:$D2; MATCH(1E+306; $D:$D2; 1) ) ) / H ); 0 ).

但是,这个公式仍然没有考虑后续的剂量摄入,无论如何都不正确。 IE。如果我在单元格 D9 中输入新值 50,单元格 C10 中的值应该会增加,但实际上并没有增加。
经过深思熟虑并寻求帮助elsewhere,我仍然不知道如何才能做到这一点。

有人能帮忙吗?


作为附加上下文,此示例中的药物是环戊丙酸睾酮 (TC),以肌内注射方式给药,'T / TC ratio' 指存在的睾酮 (T) 的比例在 TC 上,我真的不知道这个比率是否真的是 1。'Time to Cmax' 是药物在血液中达到最大浓度所需的时间。

我被告知吸收可能不是完全线性的,当达到 Cmax 时,药物可能不会 100% 吸收,这意味着其中一些之后会继续吸收;尽管如此,我还是可以假设它是线性的,并且在 Cmax 处 100% 被吸收,因为对于将要使用电子表格的人来说,这是一个足够好的近似值。

I'm putting the spreadsheet on Google Drive 让其他人更容易帮助我。

谢谢。

试试这个:

首先,由于没有办法声明一个可能的永无止境的功能,所以只计算1毫克,直到浓度消失。

将那个保留在一列中(我放在 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

一旦这样,调用这个函数就可以计算出自起源以来的时间浓度。

希望对您有所帮助