0

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

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

在此处输入图像描述

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

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

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

  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 )- 这计算了随着时间的50吸收,它线性上升,直到达到C16 (112 小时),然后保持在那里。它与前面的公式不同,因为这个公式查找在 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 )- 这是我目前 先进的公式。它说明了吸收量的线性吸收和对数消除。

  5. 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 )是:

然而,这个公式仍然没有考虑到后续的剂量摄入,无论如何都不正确。即,如果我50在单元格 D9 中输入新值,则单元格 C10 中的值应该增加,但不会增加。
经过深思熟虑并在其他地方寻求帮助后,我仍然不知道它是如何做到的。

任何人都可以帮忙吗?


作为附加上下文,本例中的药物是环戊丙酸睾酮 (TC),作为肌肉注射给药,“T / TC 比率”是指 TC 上存在的睾酮 (T) 的比率,我真的不知道知道该比率是否实际上是 1。“达到 C最大值的时间”是药物达到血液中最大浓度所需的时间。

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

我将电子表格放在 Google 云端硬盘上,以便其他人更轻松地为我提供帮助。

谢谢。

4

1 回答 1

0

试试这个:

首先,由于无法声明可能的永无止境的功能,因此只需计算 1 mg 直到浓度消失。

将其放在一列中(我放在 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

一旦这样做,只需调用这个函数,该函数将计算浓度与自起源以来的时间。

希望能帮助到你

于 2019-10-12T11:49:42.330 回答