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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
Excel VBAでCSVファイルを読込むと何故か文字列が日付に変換さ
その他(Microsoft Office)
-
Excel VBAでOpenTextのFieldInfoが効かない・・
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
-
6
CSVファイルの指定列だけを読み込んでEXCELに表示したい
Excel(エクセル)
-
7
Array関数のネスト
Access(アクセス)
-
8
ページが増える
Excel(エクセル)
-
9
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
10
Vba初心者です。下記のコード助けてください Loopに対するDoがありませんと表示されます Sub
オープンソース
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
【Excel VBA】先頭の「0」飛びを埋める方法
Visual Basic(VBA)
-
13
CSVファイルの「0落ち」にVBA
Access(アクセス)
-
14
Accessのクエリで、replace関数を使い、データの中にある”をブランクに置き換えたいのですが
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
Excelで3E8を3.00E+8にしない方...
-
EXCELで=より左の文字を一括で...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
エクセルで文字列の最大値を抽...
-
エクセルで文字列をtxtファイル...
-
VBの「As String * 128」とは?
-
VBAでの Replace関数で、ワイル...
-
Left関数とRight関数を合わせた...
-
MS SQLServer のSQLで文字列の...
-
同一セル内に関数と文字列を同...
-
エクセル 数値データを桁をそ...
-
アクセスで特定の数字以外(複...
-
VBA2005 16進を2桁で表示したい。
-
VBA テキストボックスの計算
-
[C言語]fputsとfprintfの違い
-
SQL の Update文(?) と ...
-
Pro c/c++ でホスト変数の後に....
-
VBAを使って選択した範囲の数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
エクセル 数値データを桁をそ...
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
sedなどで、特定の文字列の後の...
-
MS SQLServer のSQLで文字列の...
-
Left関数とRight関数を合わせた...
-
Msgboxの×が押されたとき
-
アクセスで特定の数字以外(複...
-
【Excel VBA】複数ある特定の文...
-
エクセルでセル内の文字列の最...
-
C#で年月を比較する
おすすめ情報