Сравните точные целые числа больше, чем "длинное целое" - PullRequest
0 голосов
/ 29 июня 2018

Мне нужно найти лучший тип данных VBA в Excel 2013, чтобы я мог сделать более точное сравнение между двумя положительными 10-значными целыми числами. Я нашел и попробовал CULng, но в этой версии этого, похоже, не существует. Кроме того, CLng не имеет диапазона, необходимого для этих чисел.

У меня есть база телефонных номеров (10 цифр), и мне нужен способ сравнить два точных числа. Некоторые записи в моей БД являются строками, перечисляющими первый и последний диапазон, поэтому я не могу просто использовать If A = B Then (сделать что-то). Я пытался использовать CSng, но он округляет числа, используя экспоненциальный формат (5555559100 и 5555559150 оба становятся 5.555559e + 09). Затем эти два числа считаются равными, даже если они не совпадают. До этого кода я расширил поисковый TN только до цифр, но это все еще строковое значение.

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

1 Ответ

0 голосов
/ 30 июня 2018

Исправить переменную как удвоенную.

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
...