アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎度お世話になります。
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で何らかの指定が必要なのでしょうか?

初心者でわからないことだらけですが、よろしくお願いします。

A 回答 (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)) <- (例)文字列に変換
等を駆使すればいけるんじゃないでしょうか?
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/12/07 11:20

こんにちは。



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)を付ければ、そのまま表示できます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記方法を試してみましたが、やっぱり駄目でした(:_;)
ソースは以下のとおりです。
やりたいことは、セル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と表示されてしまいます・・・

お礼日時:2007/12/07 10:14

NumberFormatを指定せず、あらかじめセルの書式を文字列とした上で


文字列として書き出せばいけるんじゃないでしょうか?

この回答への補足

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

補足日時:2007/12/07 09:43
    • good
    • 0
この回答へのお礼

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

です(:_;)

お礼日時:2007/12/07 09:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています