Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将大型文件的文本列转换为数字_Vba_Optimization_Excel_Type Conversion - Fatal编程技术网

Vba 将大型文件的文本列转换为数字

Vba 将大型文件的文本列转换为数字,vba,optimization,excel,type-conversion,Vba,Optimization,Excel,Type Conversion,我有一个由C自动生成的大型Excel表格,它将所有列输出为文本,由于技术原因,无法更改。我在编写一个宏时遇到了问题,该宏会将数字列转换为数字,并且速度很快。该工作表包含80列和20000行 我试着遍历所有单元格并调用 If IsNumeric(cell.Value) Then cell.Value = CDec(cell.Value) 这是非常缓慢的,还有一个额外的问题,我有一个特殊情况,以0xxx开头的字符串需要保留为字符串。如果我使用IsNumeric,然后转换为CDec,我将丢失前导0

我有一个由C自动生成的大型Excel表格,它将所有列输出为文本,由于技术原因,无法更改。我在编写一个宏时遇到了问题,该宏会将数字列转换为数字,并且速度很快。该工作表包含80列和20000行

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

If IsNumeric(cell.Value) Then cell.Value = CDec(cell.Value)
这是非常缓慢的,还有一个额外的问题,我有一个特殊情况,以0xxx开头的字符串需要保留为字符串。如果我使用IsNumeric,然后转换为CDec,我将丢失前导0


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

是否将该值存储在内存中并进行检查?类似于下面的代码,但您必须对其进行细化,并替换条件“为真”以获得有意义的结果。我将使用一个函数返回布尔值

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