
VBにてCSVデータを読み込むロジックを組んでいるのですが
データの中にカンマが入ったものがたまにあります。
通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。
たとえばCSVデータが下記の場合
123,de-ta,12,000,jjjj
実際のデータは
123
de-ta
12,000
jjjj
ですが
12,000を2個のデータと認識して
123
de-ta
12
0000
jjjj
のようになってしまいます。
どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。
よろしくお願い致します。
No.11ベストアンサー
- 回答日時:
こんにちは
そのアプリは、固定長出力はできないでしょうか。
二重引用符もだめだとすると、規則性を利用してロジックで分けるしかありません。
例えば・・
Line Input で1行ずつ取り込み。
念のためカンマの数をカウントしてみる。
カンマの位置で、データを切り出す。Instr()かVB6のSplit()で。
IsNumeric(str)を利用して、データが数値か文字列かを判断する。
例ですと、数値の後ろの項目は文字列になっているので、文字列が後ろに来たら、そこまでの数値を連結する。
てな具合です。
では!
ありがとうございます。
私もLine Input で1行ずつ取り込み。を考え、とりあえずプログラミングしてみました。
なんとか今、正常に稼動しています。
やはりこの手しかないようですね。
No.10
- 回答日時:
難しいですね。
でも、まずカラム数は決まっているのですよね?
123,de-ta,12,000,jjjjの場合はカラムが4になるべき?
一行を一度に読み込み、Split関数などで配列にデータを
分割し、カラム数が必要な値より大きい場合は、配列の後
ろから数値でかつ3桁のものを探して、その前が数値であれ
ば繋げるとかすれば、少しいけるかも知れません。
データが
1,222,333,222 でカラム数が2とかの場合は無理ですが。
以上、参考になれば幸いです。
No.8
- 回答日時:
既解答の中に、読んで後のロジックで解決する的な話がありますが、今私も別件の解答で失敗しましたが、もしInput #1,a,b,c式で読むと、次々にずれて変数a,b,cなどにセットされ、最後にEof(1)でレコードの終わりを上手く捉えられず、読むデータが無いというエラーに行き付くと思います。
ご解答にあるようにメモ帳に読みこんで手作業で,を除くより他無いと思います。解答者は実際テストデータでやってみて頂いて、ご批判を仰ぎたいと思います。No.7
- 回答日時:
No.5の者です。
カンマは小数点のことかと思いましたが、金額のカンマが正しいのでしょうか。金額のカンマとしても、難しいですね。例えば、12,345とあったとします。
\12と\345とも取れますし、\12345とも取れますね。
金額のカンマを除いた状態で出力すると12,345→12345となり、\12345に固定されてしまいますね。
やはり、カンマが「区切り記号」と「金額のカンマ」との違いが無い限り、無理な気がします。12、234,56、78,90とかになっていないと厳しいでしょう。\12,\234,56,\78,90など金額の頭に「区切り記号」の意味の文字列があったなら良かったのですが。
7_7_7さんは12,345のような場合、\12と\345、\12345、どのように見分けているのでしょうか。
No.6
- 回答日時:
>データの中にカンマが入ったものがたまにあります。
ロジックを組んで取り込もうとする先がカンマがあったりなかったりの可変では
ロジックでの対処は難しいのではないですか。
手間になりますが一度別のアプリで読み込んで金額をカンマなしで再出力するとか
で取り合えず対処するくらいだと思います。(例えばExcelで読み込んでカンマ編集
を除くとか)
市販のソフトでCSVで出力出来るのであれば金額のカンマを除いた状態で出力する
設定がありそうなものですが。
CSVで出力する際の設定を変更するオプションは無いのでしょうか?
No.5
- 回答日時:
No.3の回答だと、例、12,34,56,78(12,34と56,78)として、「数字と数字の間にあるカンマは数字の一部と見なす」としたら、12.34.56.78("."は小数点)とありえない数値になってしまいます。
質問の意図からして、12,000の","は小数点のことだと思いますが、上の例のように、カンマで区切られた数字が連続であった場合、12と34と56と78、12と34.56と78、・・・など、あいまいすぎて法則を見つけるのが非常に困難だと思います。12,000の前後に何か一定の法則がないと、市販のアプリ側が小数点のことを考慮していただく他に無いのでは、と思います。お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
CSV書込みの際、カンマで位置がずれる
Visual Basic(VBA)
-
カンマ区切りの数字をCSVファイルにインポートする時どうすれば?
Excel(エクセル)
-
-
4
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
5
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
6
EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込も
Excel(エクセル)
-
7
コマンドボタンを押すたびに大きくなってしまう
Excel(エクセル)
-
8
各項目がダブルクォーテーションで囲まれたカンマ区切りのCSVを作る方法?
Excel(エクセル)
-
9
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
10
VBA セル内で改行またはカンマを含む場合「””」で括る為の処理
Excel(エクセル)
-
11
ACCESS2000「定義されているフィールドが多すぎます。」のエラーについて
その他(データベース)
-
12
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
13
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
16
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
17
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
18
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
19
コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい
その他(プログラミング・Web制作)
-
20
【ExcelVBA】各セルをダブルクォーテーションで括ってCSV保存したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
Excelについて質問です。 セル...
-
[VBA][Excel]クリップボードか...
-
マクロを使ってフォルダー内に...
-
データにカンマが入ったCSVデー...
-
CSVの定義
-
エクセルの区切り位置の設定方法
-
エクセル:桁区切り「カンマ」...
-
メモ帳からエクセルにセル区切...
-
区切り文字をTABにしたい
-
StringGridの内容をクリップボ...
-
カンマ区切りの数字をCSVフ...
-
CSVファイル中の不規則な数のス...
-
トークン取得
-
openoffice calcで#DIV/0! の...
-
文字列検索&分解の方法に関して
-
WORDで改ページすると時々グレ...
-
エクセルデータからの必要項目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
Excelについて質問です。 セル...
-
WORDで改ページすると時々グレ...
-
EXCELからCSVにすると余計なカ...
-
CSVの定義
-
マクロを使ってフォルダー内に...
-
[VBA][Excel]クリップボードか...
-
カンマ区切りの数字をCSVフ...
-
メモ帳からエクセルにセル区切...
-
C#で、テキストボックスの入力...
-
【VBA】エクセルで値のみクリッ...
-
エクセルの区切り位置の設定方法
-
データにカンマが入ったCSVデー...
-
エクセルにペーストする際にカ...
-
カンマ区切り
-
[.NET2.0] メニューに区切り線
-
C#でcsvファイルの列を入れ替え...
-
openoffice calcで#DIV/0! の...
-
ひとつの命令を複数行に記述
おすすめ情報