dポイントプレゼントキャンペーン実施中!

こんばんわです。
エクセルのVBAをつかってCSV形式のファイルデーターを読み込みように某サイトを参考に作成しました。
確かに読み込む事が出来たのですが、数値も文字列扱いになってしまいます。
数値処理する方法があるのでしょうか?
Sub CSV_Read2()

Dim FileType, Prompt As String
Dim FileNamePath As Variant
Dim textline, csvline() As String
Dim Rowcnt, ColumNum As Integer
Dim ch1 As Long

FileType = "CSV ファイル (*.csv),*.csv"
Prompt = "CSV File を選択してください"
'操作したいファイルのパスを取得します
FileNamePath = SelectFileNamePath(FileType, Prompt)

If FileNamePath = False Then 'キャンセルボタンが押された
End
End If


'空いているファイル番号を取得します
ch1 = FreeFile

'FileNamePath のファイルをオープンします
Open FileNamePath For Input As #ch1

'エラーが発生したらファイルを閉じます
'CSVのファイルは1行の項目数が正確に合っていないと読めないのですが、
'色々なCSVがあるようなので入れておきます
On Error GoTo CloseFile

'表の行番号の初期化 1行目から読み込んだデータを入力します
Rowcnt = 1

Do While Not EOF(ch1) 'ファイルの終端かどうかを確認します。

'1行読み込みます
Line Input #ch1, textline

'ダブルクォーテーションを削除します
'カンマ+ダブルクォーテーションで区切られている CSV ファイルなどは
'適時追加してください
textline = Replace(textline, """", "")

'カンマで分離します
csvline() = Split(textline, ",")

'配列渡しでセルに代入
Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline()

Rowcnt = Rowcnt + 1
Loop

CloseFile:
'ファイルを閉じます
Close #ch1

End Sub


Function SelectFileNamePath(FileType, Prompt) As Variant
SelectFileNamePath = Application.GetOpenFilename(FileType, , Prompt)
End Function
Function GetItemNum(FileNamePath) As Integer
Dim ch1 As Long
Dim textline As String

'空いているファイル番号を取得します
ch1 = FreeFile

'FileNamePath のファイルをオープンします
Open FileNamePath For Input As #ch1

Line Input #ch1, textline '1行だけ読み込みます。

Close #ch1

GetItemNum = 1
'1行中のカンマの数を数えます
Do
GetItemNum = GetItemNum + 1
textline = Mid(textline, InStr(textline, ",") + 1)
Loop Until InStr(textline, ",") = 0

End Function

A 回答 (4件)

こんにちは。



もう1つの投稿サイトで完璧な回答がついてますよ。
そちらを参考にされたら良いかと。

『すいませんがVBA初心者ですので』
...という事らしいので、失礼とは思いますが、その回答内容が理解できない場合は
一般機能で、ワークシートメニュー[データ]-[外部データの取り込み]-[テキストファイルのインポート]を
試されたほうが良いかと思います。
    • good
    • 0

>数値も文字列扱いになってしまいます


当たり前のこと。テキスト形式やCSV形式はそういうものです。
全て情報は(半角・全角)文字列と半角カンマで入ります。
数字も(各機種での)コンピュター内部での計算できる数値は、特別な形式(普通意識しなくて良いが)をしているものですが、それではなくアスキー文字コードなどの文字コードで入ります。コンピュターの基礎的な勉強が不足していると見受けます。
ーー
CSVの場合は、対処は数字文字列がどのフィールドかは、ユーザーには既知の話となっている前提です。中身をメモ帳などで見ればわかる話だが。
そして数値の場合は、カンマから、次のカンマまでの数字だけの文字
列を数値化する関数(Val)で数値化する。すると数値演算が可能になるし、書式(NumberFormat)だ適用できるようになる。
VB(A)ならSplit関数、Val関数を使えばよい。
この質問にはそんな長いコード例なんぞ不要と思う。
要点を絞って文章で疑問点を表現して質問のこと。

       
    • good
    • 0

配列渡しでセルに代入


Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline()

Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = val(csvline())

でだめ?
    • good
    • 0

読み込んだ文字になっている数字はVal関数で本来の数値になりますがこれではだめなのかしら?

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
すいませんがVBA初心者ですので具体的にどうすればいいのかご教授いただければ有難いです。

お礼日時:2008/06/22 22:23

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