【发布时间】:2015-02-16 23:39:47
【问题描述】:
我在这里看到这个问题时遇到了一些奇怪的事情:Issue with VBA Excel number formatting 我想我可以扩展它,看看是否有人可以解释。
假设我有一个 Excel 文档,在 A 列中有 5 个单元格,所有单元格的值都是 1234
- 第一个用格式字符串
"000000000"格式化 - 第二个使用 Excel 的“数字”格式进行格式化
- 第三个被格式化为 Excel 的“常规”格式
- 第四个被格式化为“文本”
- 第五个被格式化为“文本”但实际上是字符串
"000001234"
因此,excel表格是这样的
A |
----------+-
000001234|
1234.00|
1234|
1234 |
000001234 |
现在我运行以下代码,稍微基于上面提到的问题。
Sub test3()
Dim rng As Range
Dim cl As Range
Set rng = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
For Each cl In rng.Cells
If 1234 = "000001234" Then
cl.Offset(0, 1).Value = "A"
End If
If 1234 = cl.Value Then
cl.Offset(0, 2).Value = "B"
End If
If "000001234" = cl.Value Then
cl.Offset(0, 3).Value = "C"
End If
Next cl
End Sub
输出如下
A | B | C | D |
----------+---+---+---+-
000001234| A | B | |
1234.00| A | B | |
1234| A | B | |
1234 | A | B | |
000001234 | A | B | C |
B 列很有意义。 VBA 可以像比较数字一样比较字符串,并且通过扩展列 C 也很有意义,在每种情况下,我们要么将数字与前 3 行中的数字进行比较,要么进行类似的字符串比较最后 2 行。
但是D 专栏让我明白了,基本上是我的问题。
如果1234 = "000001234" 和1234 = cl.Value 那么为什么不是"000001234" = cl.Value 在所有情况下都不是?
【问题讨论】: