アプリ版:「スタンプのみでお礼する」機能のリリースについて

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件)

#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を入れておいても無害のようだ。
    • good
    • 2

「外部データの取り込み」のマクロの記録などを真似ているのだろうが、


そんなことをしなくても、テキストファイルを読んで、Splitでカンマで分轄し、セルに書くとき、シングルコーテーション+データ
でセルに値をセットすればしまいでしょう。
Googleで「エクセルVBA CSVファイル 読み込み」でコード例が出てくるのでは。
標題だけ読むと数値も文字列で読んで良いかのようだがそうなのか。
CSVも
数値そのまま+文字列は"”つき
数値も文字列も””なし
数値も文字列も””つき
などがあって、元データがどれか注記ぐらいすること。
ーー
「外部データの取り込み」のマクロの記録でもフィールドごとに表示形式を設定する操作の画面(ウイザード3/3)
でフィールド(列)ごとに文字列・数値・日付などに指定できるし、それをやれば、それなりのコードになったと思うが。
    • good
    • 0

わざわざエクセル使う理由が良くわかんないけど、


Cstr使って文字列に変換すればよいのでは?
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています