• ベストアンサー

excel vba 17桁の数字が表示できません。

毎度お世話になります。 EXCEL VBA で、CSVファイルを読み込み マクロで17桁数字を表示したいのですが、どうしても出来ません。 Range(Cells(GYO, 1), Cells(GYO, 4)).NumberFormat = "00000000000000000" 上記ですと15桁制限のため下2桁がゼロになってしまい Range(Cells(GYO, 1), Cells(GYO, 4)).NumberFormat = "@" ですと1.2345E+16となってしまい Range(Cells(GYO, 1), Cells(GYO, 4)).NumberFormat = "'00000000000000000" ですと'12345678901234500 となってしまいます。 セルの書式設定はあらかじめ文字列にしてありますが、これも vbaで何らかの指定が必要なのでしょうか? 初心者でわからないことだらけですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuroooooo
  • ベストアンサー率47% (8/17)
回答No.3

No2のかたが言われているように、インポートのうけを文字列には されていないようです(Variantで受けている)ので受け取った 値が数値になってしまいます。 dim X(1 tTo 4) as Stringとすれば文字列で受けます。 貼り付け時に数値文字混在データで問題があるのであれば Cells(GYO, 1) = X(1) Cells(GYO, 2) = Clng(X(2)) <- (例)longに変換 Cells(GYO, 4) = Cstr(X(4)) <- (例)文字列に変換 等を駆使すればいけるんじゃないでしょうか?

eikichi99
質問者

お礼

ありがとうございました!出来ました 変数xをstringにすればよかったんですね。 大変勉強になりました。ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 CSVインポートをどのようにしているのか分かりませんが、文字列にして貼りつければよいだけです。 GYO = 1 For i = 1 To 4  If IsNumeric(Cells(GYO, i)) Then    Cells(GYO, i).Value = "'" & Cells(GYO, i).Value  End If Next インポートの仕方を変えて、文字列型の配列変数でそのまま置けば、数字の数値型への変換がおこりません。また、インポート自体に、上記のようなプレフィックス文字(PrefixCharacter)を付ければ、そのまま表示できます。

eikichi99
質問者

お礼

ありがとうございます。 上記方法を試してみましたが、やっぱり駄目でした(:_;) ソースは以下のとおりです。 やりたいことは、セルAとDの17桁数字が異なるときに 出力したいのですが・・・ Option Explicit ' CSV形式テキストファイル(4カラム)読み込みサンプル Sub READ_TextFile() Const cnsFILTER = "csvファイル (*.csv),*.csv" Dim xlAPP As Application Dim intFF As Integer Dim strFILENAME As String Dim X(1 To 4) As Variant Dim GYO As Long Dim lngREC As Long Dim i As Integer Set xlAPP = Application xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub intFF = FreeFile Open strFILENAME For Input As #intFF GYO = 1 Do Until EOF(intFF) lngREC = lngREC + 1 xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)" ' レコードを読み込む(4項目のCSV) Input #intFF, X(1), X(2), X(3), X(4) For i = 1 To 4 If IsNumeric(Cells(GYO, i)) Then Cells(GYO, i).Value = "'" & Cells(GYO, i).Value End If Next If X(1) <> X(4) Then Range(Cells(GYO, 1), Cells(GYO, 4)).Value = X ' GYO = GYO + 1 End If Loop Close #intFF xlAPP.StatusBar = False MsgBox "ファイル読み込みが完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE End Sub 結果は、'12345678901234600と表示されてしまいます・・・

  • kuroooooo
  • ベストアンサー率47% (8/17)
回答No.1

NumberFormatを指定せず、あらかじめセルの書式を文字列とした上で 文字列として書き出せばいけるんじゃないでしょうか?

eikichi99
質問者

お礼

回答ありがとうございます。 numberformatをコメントにして、セルの書式設定を文字列にして 実行したところ、結果は '12345678901234600 です(:_;)

eikichi99
質問者

補足

すみません。1.2345E+16 の間違いです。

関連するQ&A