VBAでのCSV ダウンロードに方法ついて(文字列)
つい最近VBAを勉強し始めた素人ですが、コードの作成にあたり早くも難航しております。VBAにお詳しい方、よろしければ下記内容にてファイルを作成する場合の方法をご教示いただけないでしょうか?
CSV…カンマ区切り
データ数 46列(A~AT) レコード数 4万件(概算)
そのうち、全部のセルにデータが入っているだけではなく、空白のセルもあり。
エクセル…2003
VBAで指定ファイルを開き、CSVファイルをダウンロードしたいのですが
その際に7,8列(G,H列)のみを文字列としてダウンロードしたいです。
またファイルを読み込む際はOPEN TEXTなどの別ファイルで開くのではなく、あくまで同ファイルの違うシート内に落としたいと思っております。
一応、拙いながらに途中までは自力でコードを組んでみたのですが。。。
*******************************************************
Sub CSVダウンロード()
Const conTitle = "テキストファイルの読み込み処理"
Const conFilter = "全てのファイル(*.*),*.*"
Dim xlAPP As Application
Dim csv As String
Dim Freef As Long
Dim X(1 To 46) As Variant
Dim Gyo As Long
Dim rec As Long
Set xlAPP = Application
xlAPP.StatusBar = "読み込むファイルを選んでください"
csv = xlAPP.GetOpenFilename(Filefilter:=conFilter, _
Title:=conTitle)
If StrConv(csv, vbUpperCase) = "FALSE" Then Exit Sub
Freef = FreeFile
Open csv For Input As #Freef
Gyo = 1
Do Until EOF(Freef)
rec = rec + 1
xlAPP.StatusBar = "読み込みちゅうです。。。(" & rec & "レコード目)"
Input #Freef, X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), _
X(12), X(13), X(14), X(15), X(16), X(17), X(18), X(19), X(20), X(21), X(22), X(23), _
X(24), X(25), X(26), X(27), X(28), X(29), X(30), X(31), X(32), X(33), X(34), X(35), _
X(36), X(37), X(38), X(39), X(40), X(41), X(42), X(43), X(44), X(45), X(46)
Gyo = Gyo + 1
Range(Cells(Gyo, 1), Cells(Gyo, 46)).Value = X
Loop
Close #Freef
xlAPP.StatusBar = False
MsgBox "ファイル読み込み終了しました!" & vbCr & _
"レコード件数=" & rec & "件", vbInformation, conTitle
End Sub
**************************************************
これを実行するとエラーコード62『ファイルにこれ以上データがありません』と表記され、デバックで
Input #Freef, X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), _
X(12), X(13), X(14), X(15), X(16), X(17), X(18), X(19), X(20), X(21), X(22), X(23), _
X(24), X(25), X(26), X(27), X(28), X(29), X(30), X(31), X(32), X(33), X(34), X(35), _
X(36), X(37), X(38), X(39), X(40), X(41), X(42), X(43), X(44), X(45), X(46)
の部分が黄色くなります。また、途中でなぜか列がズレてしまいます。元データを見ると全て綺麗に指定のセルに収まっているのですが。
どのように書き換えるべきか思いつきません。
お手数ですが、宜しくお願いいたします。
お礼
早速のご回答ありがとうございます。 例示されたコードをそのまま使うことができなかったのですが、 SplitとUBoundを使えば良いことがわかったので、それらを使って解決しました。 助かりました。お世話になりました。