Excel2000のVBAマクロで、CSVファイルを読み込んで
マッチング処理をしたいと考えています。
CSVファイルはコードテーブルで参照のみ。
中身は、「コード,名前,区分」の配列になっております。
コードは"0012345"と"12345"は別物として扱いたいので
文字列として読み込む必要があります。
CSVファイルの中身は以下の感じです。
12345,名前1,区分1
0012345,名前2,区分2
0000022222,名前3,区分1
...
そこで、以下のようなコードを書いて見ました。
Sub OpenCSV()
Workbooks.OpenText Filename:="C:\CSV.txt" _
DataType:=xlDelimited, Comma:=True, _
TextQualifier:=xlTextQualifierNone, _
FieldInfo:=Array(Array(1,2),Array(2,2), _
Array(3,2))
End Sub
ところが開いたシートではコード部分が文字列として
取り込まれておらず、セルの書式も標準になっています。
FieldInfoの設定方法を変えて、
Sub OpenCSV()
Dim tmpInfo(256) As Variant
Dim i As Integer
For i = 1 to 256
tmpInfo(i) = Array(i,2)
Next
Workbooks.OpenText Filename:="C:\CSV.txt" _
DataType:=xlDelimited, Comma:=True, _
TextQualifier:=xlTextQualifierNone, _
FieldInfo:=tmpInfo
End Sub
このようなコードにしたところ、「型が一致しない(エラー13)」というエラーになってしまいます。
結局、FieldInfoが効いてない動きなのですが、
どこが悪いのか皆目見当が付きません。
アドバイスを頂けますと幸甚です。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
一番目のコードでOKだと思います。
当方で一番目のコードを試したところOKでした。
ちょっと不思議ですねぇ。
回避策として、TextFileを開くのではなくて、ThisWorkbookの使ってないシート等にインポートし、
それで処理をするというのはどうでしょうか。
外部データの取り込みから、テキストファイルのインポートをマクロ記録し、修正等加え実行してみて下さい。
これも試してみましたがOKでした。
それから、2番目のコードがエラーになる理由ですが。
For i = 1 to 256
tmpInfo(i) = Array(i,2)
Next
For が1~256ということは、
tmpInfo(0) には何も入ってないですよね。
それにも拘わらず
FieldInfo:=tmpInfo
とやってますので当然、エラーに成りますよね。
配列は、0からですので
Option base 1 が必要かと。
解決策ではなく申し訳ありませぬ。(^^;;;
No.1
- 回答日時:
本当はFieldInfoの質問であることは承知してます。
テキスト、CSVファイルの読みこみ時の、数字データの先頭0落ちの問題だと思うのですが、時々本OKWEBでも載ります。
正面の回答が判らないので、
もしよい回答が無ければ最後の手段として、下記を試してください。原始的な方法です。
Sub test01()
Open "aaa22.csv" For Input As #1
j = 1
k = 1
While Not EOF(1)
Line Input #1, a
' MsgBox a
s = Split(a, ",")
For i = 0 To UBound(s)
Cells(j, k) = s(i)
'msgbox s(i)
k = k + 1
Next i
k = 1
j = j + 1
Wend
Close #1
End Sub
CSVファイル名は修正してください。
(1)Line Input #1, aをInput #1, aとしてしまうと変数に入る段階で0落ちするようです。
(2)受けるエクセルシートの方で、A列の書式は、「読み込む前」(ここが大切、後では何もならない)に、文字列に設定しておいてください。文字列の列は全部。
ここがポイント・要領です。
この回答への補足
ご回答ありがとうございます。
結局、Opentextではどうしても出来ず、代わりにQuaryTables.Addで対応することにしました。
以下ソースです。ご参考まで。
(一応当方環境では正常動作しています)
Sub GetInfo()
Dim m As Integer
Dim n As Integer
Dim A As Integer
Dim Text_Code As String
Dim Filefullpath As String
Dim MyDir As String
'####################################
'情報ファイルのフルパス取得
'####################################
MyDir = Application.Workbooks(Workbooks.Count).Path
Filefullpath = MyDir & "\infotable.csv"
'####################################
'CSVファイルの読み込み
'####################################
Workbooks.Add
n = Workbooks.Count
Sheets("Sheet1").Select
Sheets("Sheet1").Name = "InfoTable"
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Filefullpath, Destination:=Range("A1"))
.Name = "InfoTable"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 2)
.Refresh BackgroundQuery:=False
End With
'######################
' ここから処理ロジック
'######################
......
Application.Workbooks(n).Worksheets("InfoTable").Activate
A = 1
Text_Code = Cells(A, 1)
......
'********************************
'終了処理
'********************************
......
Application.Workbooks(n).Close SaveChanges:=False
......
End Sub
ご回答、ありがとうございます。
文字数制限に引っ掛かってしまったので、
補足欄に当方対応ロジックを書きましたので、
ご参考まで。
引き続き、OpenTextで動かす方法の情報があれば
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/04 12:47
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
Array関数のネスト
Access(アクセス)
-
Excel VBAでテキストを開く際の表示形式
Visual Basic(VBA)
-
-
4
VBAでCSVを文字列として取り込む方法
PowerPoint(パワーポイント)
-
5
Excel : OpenTextメソッドが正常に動作しないのはなぜ?
Excel(エクセル)
-
6
【Excel VBA】先頭の「0」飛びを埋める方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
pythonにてseleniumを使うも、...
-
access2003 クエリSQL文に...
-
chatgptでつくってもらったコー...
-
Accessの文字列部分一致を合計...
-
ExcelのVBAコードについて教え...
-
GrapeCityのSpreadについて
-
欠番の抽出について
-
【VB6】実行ファイルとした後、...
-
HTML電卓で1文字消す方法
-
Nullの使い方が不正です。
-
ペンダントライトのコードの色...
-
JANコードとPOSコードは同じ?
-
ユーザーフォームで銀行に対応...
-
Exel VBA 別ブックから該当デ...
-
ACCESSユニオンクエリでORDER B...
-
1、Rstudioで回帰直線を求める...
-
PreviewKeyDownイベントが2回...
-
videopadについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
ExcelのVBAコードについて教え...
-
Exel VBA 別ブックから該当デ...
-
chatgptでつくってもらったコー...
-
PreviewKeyDownイベントが2回...
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
JANコードとPOSコードは同じ?
-
JavaScript|特定URLだった時、...
-
ACCESSユニオンクエリでORDER B...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
COBOLの文法
-
Gitのクローンについて
-
Outlook VBAについて
おすすめ情報