我有一个从C#自动生成的大型Excel工作表,它将所有列输出为文本(由于技术原因,这不能更改)。我在编写一个将数字列转换为数字的宏时遇到问题,并且快速执行(该表包含80列和20,000行)。
我已经尝试迭代所有单元格并调用
If IsNumeric(cell.Value) Then cell.Value = CDec(cell.Value)
这非常慢并且还有一个额外的问题,我有一个特殊情况,其中以“0xxx”之类的东西开头的字符串需要保存为字符串。如果我使用IsNumeric
然后转换为CDec
,我会失去前导0!
是否有一些简单的技巧可以说如果一个列中的一个值是一个字符串,那么不要处理该列,否则将它们转换为数字EXCEPT,以便我们有一个前导0?
答案 0 :(得分:0)
将值存储在内存中并进行检查吗?与下面的代码类似的东西,但您必须对其进行优化并将condition_is_true
替换为有意义的内容。我会使用函数返回一个布尔值。
Dim input_var As String
For r = 1 To 20000
For c = 1 To 80
input_var = Sheet1.Cells(r, c).value
'do some stuff to the string
If condition_is_true Then
Sheet1.Cells(r, c).value = CDec(input_var)
Else
Sheet1.Cells(r, c).value = input_var
End If
Next c
Next r