Функция Excel VBA Format возвращает неожиданное значение с «1A», «1P» - PullRequest
0 голосов
/ 04 августа 2020

Я хотел бы записать некоторые строковые коды в ячейки Excel, ниже приведен пример сценария:

Sub Write2DigitCode()

    Dim aryCode(), i As Long
    
   aryCode = Array("1B", "1A", "10", "42", "03", "04", "1N", "1P", "1J", "02", "07")
    With ActiveSheet.[A1]
        .Value = "with_format_func"
        .Offset(, 1).Value = "expected"
        
        For i = LBound(aryCode) To UBound(aryCode)
            .Offset(i + 1).NumberFormat = "@"
            .Offset(i + 1, 1).NumberFormat = "@"
            
            '**** method 1: user Format function directly
            .Offset(i + 1).Value = Format(aryCode(i), "00")
            
            '**** method 2: use IsNumeric to distinguish code without digits
            If IsNumeric(aryCode(i)) Then
                .Offset(i + 1, 1).Value = Format(aryCode(i), "00")
            Else
                .Offset(i + 1, 1).Value = aryCode(i)
            End If
        Next
    End With
    
    Erase aryCode

End Sub

Method 2 получил то, что мне нужно, Method 1 получил два неожиданных значения с «1A», «1P»:

with_format_func    expected
1B  1B
00  1A
10  10
42  42
03  03
04  04
1N  1N
01  1P
1J  1J
02  02
07  07

введите описание изображения здесь

Результат означает Format("1A", "00") = "00" и Format("1P", "00") = "01". В этом нет смысла.

Не должен возвращаться, когда код содержит буквы? Будем признательны за любые комментарии или ответы.

1 Ответ

0 голосов
/ 04 августа 2020

Для чисел с постфиксом A или P функция форматирования переводит число в час дня. Возвращаемое значение - процент дня (ie. 12:00 = 50%). Форматирование с двойным нулем («00») округляет значение до целого числа: AM = 0, PM = 1

Debug.Print "12A" & "   " & Format("12A", "00.00") & "   " & Format("12A", "00")
Debug.Print " 6A" & "   " & Format( "6A", "00.00") & "   " & Format( "6A", "00")
Debug.Print "12P" & "   " & Format("12P", "00.00") & "   " & Format("12P", "00")
Debug.Print " 6P" & "   " & Format( "6P", "00.00") & "   " & Format( "6P", "00")

Выход

12A   00.00   00
 6A   00.25   00
12P   00.50   01
 6P   00.75   01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...