前提・実現したいこと
ツールにCSVの住所データ(都道府県、市町村番地)とエクセルのデータ(都道府県、市、町村)の
2つを取り込み、ボタンを押すと、該当するデータA、前回対象だった(CSVにフラグがある)データB、エクセルに対象外と記載のあるデータC、エクセルに確認事項ありとなったデータDを吐き出すツールを作成しています。
CSV側のデータが大き目(6万件前後)で、両方のデータが使用毎(年1度)に変わる可能性があるものです。
ほぼ初心者で今までも簡単なものは触っていたのですが、少し期間が空いてしまい手詰まりになっています。
お知恵を拝借したく、よろしくお願いします。
発生している問題・エラーメッセージ
CSV側
実行時エラー1004
アプリケーション定義、またはオブジェクト定義のエラーです。
Excel側
ファイル名、または番号が不正です。
該当のソースコード
VBA Sub CSV入力1() '--CSV出力用_開始 Dim varFileName As Variant Dim intFree As Integer Dim strRec As String Dim strSplit() As String Dim i As Long, j As Long varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName <> False Then Workbooks.Open varFileName Else MsgBox "キャンセルされました" 'Exit Sub End If intFree = FreeFile '空番号を取得 Open varFileName For Input As #intFree 'CSVファィルをオープン '既存の記載内容を削除する Worksheets("顧客").Range("A2", "ActiveCell.SpecialCells(xlLastCell)").ClearContents '一行ずつ、エクセルに書き出し i = 0 Do Until EOF(intFree) Line Input #intFree, strRec '1行読み込み i = i + 1 strSplit = Split(Replace(strRec, """", ""), ",") 'カンマ区切りで配列へ For j = 0 To UBound(strSplit) Cells(i, j + 1) = strSplit(j) Next 'エラーメッセージに関しては26行目(Z列に出力) Cells(i, 26).Value = ErrMsg_1 Loop Close #intFree '--CSV出力用_終了 InputRowcount = i End Sub Sub excelcopy() Dim ExcFileName As Variant Dim ExcintFree As Integer Dim ExcstrRec As String Dim ExcstrSplit() As String Dim k As Long, j As Long ExcFileName = Application.GetOpenFilename(FileFilter:="Excel ワークシート (*.xlsx),*.xlsx", _ Title:="Excelファイルの選択") If ExcFileName <> False Then Workbooks.Open ExcFileName Else MsgBox "キャンセルされました" 'Exit Sub End If ExcintFree = FreeFile '空番号を取得 Open ExcFileName For Input As #intFree 'Excelファィルをオープン '既存の記載内容を削除する Worksheets("対象エリア").Range("A2", "G2000").ClearContents End Sub
試したこと
Excelの神髄さんなどで検索しながらやっていますがなにぶん基礎の理解もちょっと怪しくなっている気がします。
補足情報(FW/ツールのバージョンなど)
Excel2013を使用しています。
過去に他の方が作成されたものをコピーして改変してます。
当時の担当者がもういないので、確認ができません。
回答2件
あなたの回答
tips
プレビュー