首页 > 解决方案 > 根据单元格输入有条件地将值计入变量

问题描述

我正在执行一项任务,我在不同的温度下运行测试,但测试并不总是按顺序运行,所以我一直在跟踪温度和测试中的总时间。之后我回去手动检查在每个温度下花费了多少时间。下面的代码显示了到目前为止我已经走了多远,但我不确定如何处理周末发生的空单元格,因为我无法告诉记录时间。

在我附加的示例中,对于“测试 1”,我希望从 (13-0)+(61-13)+(221-203)+(265-221) 中获得“环境”的总数 123,但是它输出 358 . 寻找一些关于我在这里出错的地方。提前致谢!

这是我到目前为止编写的代码:

Sub Calculate_Time_at_Temp()

Dim ambient As Double, cold_neg_20 As Double, humidity As Double, hot_60 As Double, cold_neg_30 As Double, hot_80 As Double, rng As Range, cell As Range

Sheets("Sheet1").Activate
Set rng = Range("X5")
For Each cell In Sheets("Sheet1").Range("C8:W8")
    'If IsNumeric(cell.Offset(-3, 0).Text) Then
        If cell.Value = "Ambient" Then
        ambient = ambient + (cell.Offset(-3, 0).Value - cell.Offset(-3, -1).Value)
        rng.Value = ambient
       
    End If
    'End If
   Next
   
End Sub

在此处输入图像描述

标签: excelvba

解决方案


我只是添加了一个移位值来获取上一列:如果是星期六/星期日,则为 -3,否则为 -1。假设您的日期位于第一行(单元格(1,x))。没有您的文件,我无法对其进行测试。

Sub Calculate_Time_at_Temp()

    Dim ambient As Double, cold_neg_20 As Double, humidity As Double, hot_60 As Double, cold_neg_30 As Double, hot_80 As Double, rng As Range, cell As Range
    Dim iShift As Integer
    Dim rRangeDate As Range
    Sheets("Sheet1").Activate
    Set rng = Range("X5")
    For Each cell In Sheets("Sheet1").Range("C8:W8")
        Set rRangeDate = Sheets("Sheet1").Cells(1, cell.Column)
        iShift = IIf(Weekday(CDate(rRangeDate.Value), vbMonday) > 5, 3, 1)
        If cell.Value = "Ambient" Then
            ambient = ambient + (cell.Offset(-3, 0).Value - cell.Offset(-3, -iShift).Value)
            rng.Value = ambient
        End If
    Next
   
End Sub

推荐阅读