- 締切済み
VBAでCSVを文字列として取り込む方法
VBAでCSVを文字列として取り込む方法を教えてください。 下記のようにCSVファイルを取り込んでいます。 Array関数を使用していますが、どうしても文字列として認識してくれません。 Sub CSV取り込み() Dim xlAPP As Application ' Applicationオブジェクト Dim strFILENAME As String ' OPENするファイル名(フルパス) 'Applicationオブジェクト取得 Set xlAPP = Application '「ファイルを開く」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE) 'キャンセルされた場合は以降の処理は行なわない If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _ Array(4, 2), Array(6, 2)) Workbooks.Open Filename:=strFILENAME ActiveWorkbook.Sheets(1).Cells.Copy _ Destination:=ThisWorkbook.Worksheets("sheet1").Range("A1") End Sub この書式ではCSVを文字列として取り込めないのでしょうか? どなた様かご教示ください。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。追加メモ。 http://www.d3.dion.ne.jp/~jkondou/excelvba/T1.htm 3)外部ファイルウィザード3/3の設定。 .TextFileColumnDataTypes = Array(5, 9, 1, 9, 2) 区切って作成した列のデータ型の設定。 1・・・標準(数値) 2・・・文字列 5・・・日付 9・・・削除(表示しない) ---- http://d.hatena.ne.jp/jitte/20060512/1147450765 ここで問題なのがArray()の部分です。読み込むCSVのカラム数に合わせてそれぞれの形式を指定する(2=文字列のようです)のですが、カラム数は読み込んでからでないとわかりません。1回読み込んでからカラム数を調べて再読み込みするのかな、と思っていたのですが、実は、Excelの最大カラム数=256に合わせて配列を指定すればよいことがわかりました。 ---- (注)列数以上に.TextFileColumnDataTypesでArray(5, 9, 1, 9, 2,1,1,1)などと1を入れておいても無害のようだ。
- imogasi
- ベストアンサー率27% (4737/17069)
「外部データの取り込み」のマクロの記録などを真似ているのだろうが、 そんなことをしなくても、テキストファイルを読んで、Splitでカンマで分轄し、セルに書くとき、シングルコーテーション+データ でセルに値をセットすればしまいでしょう。 Googleで「エクセルVBA CSVファイル 読み込み」でコード例が出てくるのでは。 標題だけ読むと数値も文字列で読んで良いかのようだがそうなのか。 CSVも 数値そのまま+文字列は"”つき 数値も文字列も””なし 数値も文字列も””つき などがあって、元データがどれか注記ぐらいすること。 ーー 「外部データの取り込み」のマクロの記録でもフィールドごとに表示形式を設定する操作の画面(ウイザード3/3) でフィールド(列)ごとに文字列・数値・日付などに指定できるし、それをやれば、それなりのコードになったと思うが。
- ShowMeHow
- ベストアンサー率28% (1424/5027)
わざわざエクセル使う理由が良くわかんないけど、 Cstr使って文字列に変換すればよいのでは?