1

Excel スプレッドシートからテキスト ファイルに値を (CSV へのエクスポートではなく、VBA コードを使用して) エクスポートするときに問題が発生します。

これらの数値を使用して:

     -            (formatted so 0 displays as "-")
    0.10000000 
    0.0166666666666667 

If I debug.print the .Text then .Value property of each cell, the results are:
    -           --> 0
    0.10000000  --> 0.1
    0.01666667  --> 1.66666666666667E-02 

私の問題は、0.01666666666666667 (視覚的にスプレッドシート セル内) --> 1.66666666666667E-02 (セルの .Value プロパティ内) 変換が発生するのを避けたいことです。

代わりに .Text プロパティを読み取ると、結果は必要に応じて 10 進数として出力されますが、問題は、「-」としてフォーマットされた 0 が「-」としてエクスポートされることです。

すべてのシナリオで機能する、これを処理する「適切な」方法はありますか?
複数のスプレッドシートで最終的なソリューションを使用する必要があり、各スプレッドシートの表示形式の設定や各セルの内容を制御できません (つまり、数値データであるとは限りません)。

サンプルコード

Public Function test()
    Dim cell As Range: Set cell = Worksheets("Sheet1").Range("A1")
    Dim i As Integer

    Dim vSingle As Single
    Dim vVariant As Variant
    Dim vDouble As Double

    For i = 0 To 4
        vSingle = cell.Offset(i, 0).Value
        vVariant = cell.Offset(i, 0).Value
        vDouble = cell.Offset(i, 0).Value
        Debug.Print cell.Offset(i, 0).Text & " --> " & cell.Offset(i, 0).Value & " : " & vSingle & " : " & vVariant & " : " & vDouble
    Next
End Function

結果:

                                          -  --> 0 : 0 : 0 : 0
0.10000000  --> 0.1 : 0.1 : 0.1 : 0.1
0.01666667  --> 1.66666666666667E-02 : 1.666667E-02 : 1.66666666666667E-02 : 1.66666666666667E-02
 -->  : 0 :  : 0
 -->  : 0 :  : 0
4

3 に答える 3

0

問題を再現することはできませんが、次のコードを使用して解決できる場合があります。基本的に、数値かどうかを確認してから、厳密に型指定された変数に格納してからエクスポートできます。次のようなものを使用できます。

Dim num As Double

Do
    If (IsNumeric(Selection.Value)) Then
        num = Selection.Value
        ' Export num
    Else
        ' Export Selection.Value
    End If
Loop Until True
于 2012-04-11T19:29:02.207 に答える
0

関数を使用Formatして、必要に応じて値を表します

エクセルのヘルプから

フォーマット式に含まれる命令に従ってフォーマットされた式を含む Variant (文字列) を返します。

Format(expression[,format [,firstdayofweek[,firstweekofyear]]])

于 2012-04-11T19:53:00.410 に答える