比较大于“长整数”的精确整数

Compare exact integers greater than "long integer"

提问人:Keesler Water Walker 提问时间:6/30/2018 更新时间:6/30/2018 访问量:314

问:

我需要在 Excel 2013 中找到更好的 VBA 数据类型,以便我可以在两个正 10 位整数之间进行更准确的比较。我已经找到并尝试了,但这在这个版本中似乎不存在。此外,没有这些数字所需的范围。CULngCLng

我有一个电话号码数据库(10 位数字),需要一种方法来比较两个确切的数字。我的数据库中的一些条目是列出范围的第一个和最后一个的字符串,所以我不能只使用 If A = B Then(做某事)。我试过使用 ,但它使用指数格式将数字四舍五入(5555559100 和 5555559150 都变成 5.555559e+09 )。然后,即使这两个数字不匹配,它们也被视为相等。在此代码之前,我已将搜索 TN 剥离为仅数字,但它仍然是一个字符串值。CSng

Private Sub FindTN()

Dim TN As String
Dim begin  As Single
Dim last As Single
Dim RowNo As Long

Sheet1.Range("A1").Value = "5555559100TO5555559125"
Sheet1.Range("A2").Value = "5555559150TO5555559175"
Sheet1.Range("A3").Value = "5555559160"

TN = "5555559160"

For Each entry In Sheet1.Range("A1:A3")
    If Len(entry.Value) = 10 And entry.Value = TN Then
        RowNo = entry.Row
        Debug.Print "RowNo = " & RowNo

    'Find beginning and ending values of a range
    ElseIf Len(entry.Value) > 10 And InStr(11, entry.Value, "TO") = 11 Then
        begin = CSng(Left(entry.Value, 10))
        last = CSng(Right(entry.Value, 10))

        'Search within range
        If CSng(TN) >= begin And CSng(TN) <= last Then
            RowNo = entry.Row
            Debug.Print "RowNo = " & RowNo
        End If
    End If
Next entry

End Sub

它应该只在第 2 行和第 3 行匹配,但结果是

RowNo = 1
RowNo = 2
RowNo = 3
VBA Excel 类型转换 比较

评论

0赞 Scott Craner 6/30/2018
将所有事物更改为 Double 和CSngCdbl
0赞 Ron Rosenfeld 6/30/2018
使用 Decimal 数据类型。没有小数,最多可容纳 79,228,162,514,264,337,593,543,950,335

答:

1赞 Dy.Lee 6/30/2018 #1

像这样将变量固定为双倍。

Private Sub FindTN()

Dim TN As String
Dim begin  As Double 'Single
Dim last As Double ' Single
Dim RowNo As Long

Sheet1.Range("A1").Value = "5555559100TO5555559125"
Sheet1.Range("A2").Value = "5555559150TO5555559175"
Sheet1.Range("A3").Value = "5555559160"

TN = "5555559160"

For Each entry In Sheet1.Range("A1:A3")
    If Len(entry.Value) = 10 And entry.Value = TN Then
        RowNo = entry.Row
        Debug.Print "RowNo = " & RowNo

    'Find beginning and ending values of a range
    ElseIf Len(entry.Value) > 10 And InStr(11, entry.Value, "TO") = 11 Then
        begin = CDbl(Left(entry.Value, 10))
        last = CDbl(Right(entry.Value, 10))

        'Search within range
        If CDbl(TN) >= begin And CDbl(TN) <= last Then
            RowNo = entry.Row
            Debug.Print "RowNo = " & RowNo
        End If
    End If
Next entry

End Sub