- ベストアンサー
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で何らかの指定が必要なのでしょうか? 初心者でわからないことだらけですが、よろしくお願いします。
- みんなの回答 (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)) <- (例)文字列に変換 等を駆使すればいけるんじゃないでしょうか?
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 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)を付ければ、そのまま表示できます。
お礼
ありがとうございます。 上記方法を試してみましたが、やっぱり駄目でした(:_;) ソースは以下のとおりです。 やりたいことは、セル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)
NumberFormatを指定せず、あらかじめセルの書式を文字列とした上で 文字列として書き出せばいけるんじゃないでしょうか?
お礼
回答ありがとうございます。 numberformatをコメントにして、セルの書式設定を文字列にして 実行したところ、結果は '12345678901234600 です(:_;)
補足
すみません。1.2345E+16 の間違いです。
お礼
ありがとうございました!出来ました 変数xをstringにすればよかったんですね。 大変勉強になりました。ありがとうございました。