2012-04-26 79 views
0

我有一个从C#自动生成的大型Excel工作表,它将所有列输出为文本(由于技术原因,这不能更改)。我在编写宏时会遇到问题,它会将数字列转换为数字,并快速执行(该表包含80列和20000行)。将文本列转换为大文件的数字

我试图遍历所有的细胞,并呼吁

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

这是非常缓慢的,有我在那里开始的字符串的东西,如“0XXX”的特殊情况下,额外的问题需要保持为一个字符串。如果我使用IsNumeric然后转换为CDec,那么我将失去领先的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