gpt4 book ai didi

excel - Excel VBA - 格式 ("7A", "00") 输出 "00"而格式 ("7B", "00") 导致所需的输出 "7A"。为什么它们不同?

转载 作者:行者123 更新时间:2023-12-03 23:05:43 24 4
gpt4 key购买 nike

我正在尝试列出每个 Excel 行从 7F 到 00 的十六进制值。我通过执行以下代码实现了它:

Sub ListDownHex()
Dim StartValue, i As Integer
Dim nRow As Long
Dim sh As Worksheet

Set sh = ActiveSheet
StartValue = 127 'memory location of 8051 RAM
nRow = 4

For i = StartValue To 0 Step -1
sh.Range("A" & nRow) = Format(Right$("00" & Hex(i), 2), "00")
nRow = nRow + 1
Next i

End Sub
除了具有“A”的十六进制值,如“7A”、“6A”、“5A”等,结果为“00”。
进一步检查中间窗口确认 Format() 函数可以做到这一点。
? Format("7B","00") 'desired output
7B
? Format("7A","00") 'not expected output
00
这是一个错误还是我错过了什么?为什么他们的行为不同?
(注意:我的问题的重点是 Format() 的“奇怪”行为,而不是我的整个代码。)

最佳答案

Format() 是一个复杂的函数,可以格式化各种事物,包括日期和数字。
当您向它传递一个字符串("7A""7B" 是)时,它会尝试查看它们是否可以转换为数字( IsNumeric() 返回 True)或日期( IsDate() 返回 True)。如果可以,它会转换它们,然后才应用格式。IsDate()"7A" 返回 True ,这是因为“7A”是时间值“早上 7 点”(早上 7 点)的有效文本表示。
反过来,这是因为 AM/PM formatting token 的简短版本, A/P ,将“am/pm”指示符返回为“a/p”:

? Format$(#07:00:00#, "hA/P")  ' => 7A
? Format$(#17:00:00#, "hA/P") ' => 5P
所以字符串“7A”首先被转换为 Date 值(value) #12/30/1899 07:00:00# (零日期,早上 7 点)。该值的数字表示为 0.29166667 ,当根据“00”格式格式化时,四舍五入为“00”。

另一方面,“7B”不是 IsDate() , 所以 Format 输出它而不像​​它对没有其他含义的字符串所做的更改。

In reality但是,您不需要 Format()功能,你所需要的只是
= Right$("00" & Hex$(i), 2)

关于excel - Excel VBA - 格式 ("7A", "00") 输出 "00"而格式 ("7B", "00") 导致所需的输出 "7A"。为什么它们不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62863731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com