
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を文字列として取り込めないのでしょうか?
どなた様かご教示ください。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#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を入れておいても無害のようだ。
No.2
- 回答日時:
「外部データの取り込み」のマクロの記録などを真似ているのだろうが、
そんなことをしなくても、テキストファイルを読んで、Splitでカンマで分轄し、セルに書くとき、シングルコーテーション+データ
でセルに値をセットすればしまいでしょう。
Googleで「エクセルVBA CSVファイル 読み込み」でコード例が出てくるのでは。
標題だけ読むと数値も文字列で読んで良いかのようだがそうなのか。
CSVも
数値そのまま+文字列は"”つき
数値も文字列も””なし
数値も文字列も””つき
などがあって、元データがどれか注記ぐらいすること。
ーー
「外部データの取り込み」のマクロの記録でもフィールドごとに表示形式を設定する操作の画面(ウイザード3/3)
でフィールド(列)ごとに文字列・数値・日付などに指定できるし、それをやれば、それなりのコードになったと思うが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBの「As String * 128」とは?
-
エクセルで文字列をtxtファイル...
-
VBAでの Replace関数で、ワイル...
-
SQL の Update文(?) と ...
-
【Excel VBA】複数ある特定の文...
-
【COBOL】文字列から数値項目に...
-
16進数を10進数に簡単に変換す...
-
Delphi Like 演算子
-
文字列からカンマを取り除きたい
-
【Teraterm】文字列と変数の連...
-
VBA2005 16進を2桁で表示したい。
-
アクセスで特定の数字以外(複...
-
ORCLEでの小数の表示方法の変更...
-
C言語の勉強しています。すみま...
-
Left関数とRight関数を合わせた...
-
Excelで偶数行だけ文字列を数え...
-
【Teratermマクロ】文字列の分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
エクセルで文字列をtxtファイル...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
VBの「As String * 128」とは?
-
VBA2005 16進を2桁で表示したい。
-
Excelで3E8を3.00E+8にしない方...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
-
アクセスで特定の数字以外(複...
-
エクセル 数値データを桁をそ...
-
Msgboxの×が押されたとき
-
ORCLEでの小数の表示方法の変更...
-
VBAを使って選択した範囲の数字...
-
MS SQLServer のSQLで文字列の...
-
同一セル内に関数と文字列を同...
-
Pro c/c++ でホスト変数の後に....
おすすめ情報