こんばんわです。
エクセルの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
No.4ベストアンサー
- 回答日時:
こんにちは。
もう1つの投稿サイトで完璧な回答がついてますよ。
そちらを参考にされたら良いかと。
『すいませんがVBA初心者ですので』
...という事らしいので、失礼とは思いますが、その回答内容が理解できない場合は
一般機能で、ワークシートメニュー[データ]-[外部データの取り込み]-[テキストファイルのインポート]を
試されたほうが良いかと思います。
No.3
- 回答日時:
>数値も文字列扱いになってしまいます
当たり前のこと。テキスト形式やCSV形式はそういうものです。
全て情報は(半角・全角)文字列と半角カンマで入ります。
数字も(各機種での)コンピュター内部での計算できる数値は、特別な形式(普通意識しなくて良いが)をしているものですが、それではなくアスキー文字コードなどの文字コードで入ります。コンピュターの基礎的な勉強が不足していると見受けます。
ーー
CSVの場合は、対処は数字文字列がどのフィールドかは、ユーザーには既知の話となっている前提です。中身をメモ帳などで見ればわかる話だが。
そして数値の場合は、カンマから、次のカンマまでの数字だけの文字
列を数値化する関数(Val)で数値化する。すると数値演算が可能になるし、書式(NumberFormat)だ適用できるようになる。
VB(A)ならSplit関数、Val関数を使えばよい。
この質問にはそんな長いコード例なんぞ不要と思う。
要点を絞って文章で疑問点を表現して質問のこと。
No.2
- 回答日時:
配列渡しでセルに代入
Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline()
↓
Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = val(csvline())
でだめ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでcsvのフィールドが減る
-
文字コードの違うファイルイン...
-
EXCEL|csvで保存→開くcsvを閉じる
-
VBA 毎日取得するデータを反映...
-
カンマ区切りのCSVファイルから...
-
複数のcsvファイルをフォルダご...
-
CSVの読み込み処理について
-
VBAのVLOOKUPで。検索範囲で列...
-
<csv>複数条件で検索・抽出し、...
-
VBAでcsvファイルを読み込んで...
-
データ解析ソフトRでのファイル...
-
CSV形式での保存時に”文字列...
-
VBA一覧取得 再投稿
-
ファイルのアクセス回数について
-
ファイル名と同名のフォルダを...
-
簡単なexeファイルの作り方。
-
Excel VBA で フォルダ名の一部...
-
Excel VBAでテキストファイルを...
-
VB6でExcelシートのコピー、貼付け
-
【マクロ】ファイル名の日付に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
csvファイル 項目数取得
-
CSV形式での保存時に”文字列...
-
マクロから出力されるcsvのダブ...
-
csvファイルでの日付設定「yyyy...
-
複数のcsvファイルをExcelに一...
-
バッチでCSVを処理する時、空の...
-
エクセルVBA 大容量CSVファイル...
-
データ解析ソフトRでのファイル...
-
VBAでcsvファイルを読み込んで...
-
csvファイルのデータの一部を取...
-
複数のCSVファイルのAccessテー...
-
CSVファイル作成
-
【C#】パス名で無効な文字
-
csvファイルのデータの間引きを...
-
エクセル形式のファイルの読み込み
-
csvファイルを列数ごとに分割す...
-
CSVファイルの項目行を削除...
-
【エクセル マクロ】読み込ん...
-
c#でcsvから指定の1行だけを読...
おすすめ情報