2016-05-17 1 views
0

別のシートから値を抽出するこのコードがあります。 これらの値はTEXTですが、Excelを抽出した後に関係なく、でもテキストとしてフォーマットするために設定された列で、でもVBAで文字列を自動整形することからExcelを維持します

Format(value , "#") 

を使用すると、問題は、彼らが大きな数字であり、それがいずれかを変更していることは何か、数に変換しません15桁以上の数字は0に、私は数字が必要です。

彼らは、それがプロセスに変更されるように

Dim i, col1, col2 As Integer 
i = 2 
col1 = 4 
col2 = 5 
    For j = 2 To 2205 
     If Cells(j, 3).Value <> "" Then 
      If Len(Cells(j, 3)) = 20 Then 
        Cells(i, col1).Value = Format(Cells(j, 3).Value, "#") 
        Cells(i, col2).Value = Cells(j, 3).Row 
        Cells(j, 3).Value = "" 
        i = i + 1 
      End If 
     End If 
    Next j 
    i = 2 
    col1 = col1 + 2 
    col2 = col2 + 2 

答えて

1

エクセルは小数点のいずれかの側に15桁を超える数字ので、15 digits of precisionの制限を有し、基準列(J、3)に切断されていません所望の精度で記憶されない。値を挿入する前にセルフォーマットを設定しようとしましたか?値を設定する前に、Cells(i, col1).NumberFormat = "@"行を使用してください。

Dim i, col1, col2 As Integer 
    i = 2 
    col1 = 4 
    col2 = 5 
     For j = 2 To 2205 
      If Cells(j, 3).Value <> "" Then 
       If Len(Cells(j, 3)) = 20 Then 
         Cells(i, col1).NumberFormat = "@" 
         Cells(i, col1).Value = Format(Cells(j, 3).Value, "#") 
         Cells(i, col2).Value = Cells(j, 3).Row 
         Cells(j, 3).Value = "" 
         i = i + 1 
       End If 
      End If 
     Next j 
     i = 2 
     col1 = col1 + 2 
     col2 = col2 + 2 
+0

メモ:数値を[小数]としてキャストすると、数値を数値として扱うことができます(http://www.techonthenet.com/excel/formulas/cdec.php )。例: 'CDec(Cells(i、col2).Value)+ 2'。数字の桁数にはまだ限界がありますが、その制限が何であるかに関するドキュメントは見つかりません。しかし、26桁の数字を別の26桁の数字に追加することでテストすることができました。 – Tim

+1

@Tim、正しい。 VBAにはExcelと同じ制限はありません...ワークシートに数値を表示するには、NumberFormatプロパティを使用してセルをテキストとして書式設定する必要がありますが、VBAでは値をdecなどにキャストして正確な数字としてここでは、VBAのデータ型とその制限についてのリファレンスです。 http://www.quepublishing.com/articles/article.aspx?p=339929&seqNum=2 –

+1

ニース!今私は限界が29桁であることを知っている。 :D本当に... 29桁以上必要な人は? [NASAはPIを15に減らしました](http://www.jpl.nasa.gov/edu/news/2016/3/16/how-many-decimals-of-pi-do-we-really-need/ )...うーん...もし彼らがExcelを使うので彼らが15を選んだのだろうか? xD – Tim

関連する問題