Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:搜索具有特定时间值的单元格_Excel_Vba - Fatal编程技术网

Excel VBA:搜索具有特定时间值的单元格

Excel VBA:搜索具有特定时间值的单元格,excel,vba,Excel,Vba,这是我的代码: Sub FindMatchingValue() Dim i As Integer, TimeValueToFind As Date TimeValueToFind = "00:00:00" Sheets("Vessels").Range("F07").ClearContents For i = 1 To 25 ' If Sheets("Vessels").Cells(i, 1).Value = TimeValueToFind T

这是我的代码:

Sub FindMatchingValue()
    Dim i As Integer, TimeValueToFind As Date
    TimeValueToFind = "00:00:00"
    Sheets("Vessels").Range("F07").ClearContents
    For i = 1 To 25   '
        If Sheets("Vessels").Cells(i, 1).Value = TimeValueToFind Then
            MsgBox ("Found value on row " & i)

            Sheets("Vessels").Range("F07").Value = Cells(i, 1).Offset(1, 1).Resize(1).Value
            Exit Sub
        End If
    Next i
    MsgBox ("Value not found in the range!")
End Sub
此代码检查A列中以xx:xx:xx格式输入的时间,输入位置和写入时间的位置均设置为“时间”格式

a列中有一个时间为00:00:00到23:00:00的表格。 由于某些原因,此代码仅在尝试查找00:00:00时有效,而找不到任何其他时间值。我想不出原因。
我想这可能是因为TimeValueToFind是“as Date”。然而,似乎并没有“随着时间的推移”呢?不确定为什么这不起作用。如果这就是为什么它不起作用的原因,为什么00:00:00被发现了,而其他什么都没有?我打赌这是一个简单的错误,但如果能提供一些帮助,我将不胜感激

有关更多信息:

潮汐时间为A列

Tidal Time  Tidal Height
00:00:00    
01:00:00    
02:00:00    
03:00:00    
04:00:00    4.40
05:00:00    4.00
06:00:00    3.60
07:00:00    3.20
08:00:00    2.80
09:00:00    2.40
10:00:00    2.00
11:00:00    2.37
12:00:00    2.74
13:00:00    3.11
14:00:00    3.49
15:00:00    3.86
16:00:00    4.23
17:00:00    4.60
18:00:00    4.13
19:00:00    3.67
20:00:00    3.20
21:00:00    2.73
22:00:00    2.27
23:00:00    1.80

A列的完整性是时间。现在重要的是要了解,有一段时间我一直在打自己的脸,因为I到25应该是2到25,字符串潮汐高度的格式不正确,这就是错配错误的原因。

这是因为你试图比较苹果和橘子。
TimeValueToFind
类型为
Date
Sheets(“vessers”)。单元格(i,1)。Value
产生一个
double
(将两者添加到手表窗口并检查)

您可以通过将
TimeValueToFind
转换为
double
或将
Sheets(“vessers”).Cells(i,1).Value
转换为
Date

' (...)
If CDate(Sheets("Vessels").Cells(i, 1).Value) = TimeValueToFind Then
' (...)
或:

(…) delta=板材(“容器”).单元(i,1).值-CDbl(时间值-查找)
如果Abs(delta)Excel将时间存储为一天的分数。所以00:00:00是一天的0/24。小时01:00:00是一天的1/24或.041666,等等。您需要与这些值进行比较。如果测试列
A
中的值,您将看到它是一个从0到1的数字。如果你运行这样的程序,你可以看到发生了什么

Sub Test()
Dim i As Integer
Dim Test As Variant

For i = 1 To 24
    Test = Sheets("Sheet1").Cells(i, 1).Value
    Sheets("Sheet1").Cells(i, 2).Value = Test
Next i

End Sub

在内部,Excel将数字存储为
double
。众所周知,当
a
b
都是双倍时,表达式
a==b
可能返回
False
,即使您可能认为它们是相同的。这是因为浮点数的存储精度有限

你有多种选择


1) 设定一个公差<代码>如果abs(a-b)检查IsDate(像00:00:00这样的单元格)是否返回true.Hm和CDate,我得到类型missmatch错误。将TimeValueToFind转换为CDbl也找不到输入的时间值,因为存在公差,需要注意的是,正如您(和其他人)所指出的,更新了答案以反映double的精度不足。旧习难改。。。至于类型不匹配,这可能与单元格值的格式有关,因为转换时,
CDate
函数会考虑您的区域设置。现在似乎在双精度上也出现了类型不匹配错误。我的代码如下所示:
Sub FindMatchingValue()Dim i为整数,TimeValueToFind为Date TimeValueToFind=“04:00:00”Sheets(“Vessers”)。范围(“F07”)。ClearContent For i=1到25 Delta=Sheets(“Vessers”)。单元格(i,1)。Value-CDbl(TimeValueToFind)如果Abs(Delta)在这里没有错误。。。您可以发布您的输入样本吗?另外,如果您有
选项Explicit
,您是否同时声明(
Dim
)了
Delta
公差
?这些不是类型不匹配,而是编译错误,而是检查。
Sub Test()
Dim i As Integer
Dim Test As Variant

For i = 1 To 24
    Test = Sheets("Sheet1").Cells(i, 1).Value
    Sheets("Sheet1").Cells(i, 2).Value = Test
Next i

End Sub