0

C# から自動生成された大きな Excel シートがあり、すべての列をテキストとして出力します (これは技術的な理由で変更できません)。数値列を数値に変換するマクロを作成するのに問題があり、それを高速に実行します (シートには 80 列と 20,000 行が含まれています)。

すべてのセルを繰り返して呼び出してみました

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

これは非常に遅く、「0xxx」などで始まる文字列を文字列として保持する必要があるという特別なケースがあるという追加の問題があります。を使用IsNumericしてから に変換するとCDec、先頭の 0 が失われます。

列の 1 つの値が文字列であるかどうかを検出し、その列を処理せず、先頭に 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 に答える