0

我有一个从 C# 自动生成的大型 Excel 工作表,它将所有列输出为文本(由于技术原因无法更改)。我在编写一个将数字列转换为数字的宏时遇到问题,并且可以快速完成(工作表包含 80 列和 20,000 行)。

我尝试遍历所有单元格并调用

If IsNumeric(cell.Value) Then cell.Value = CDec(cell.Value)

这非常慢并且还有一个额外的问题,即我有一个特殊情况,其中以“0xxx”等开头的字符串需要保存为字符串。如果我使用IsNumeric然后转换为CDec,我将失去前导 0!

是否有一些简单的技巧可以说检测列中的一个值是否是字符串,然后不处理该列,否则将它们转换为数字,除了我们有前导 0 的情况?

4

1 回答 1

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
于 2012-04-26T18:36:17.863 回答