• 締切済み

エクセルVBAで、条件一致する値をcsvから抽出

いつも大変お世話になっております。 初心者につき、ご教示いただけますと幸いです。 エクセルBook1というファイルに A列に地域番号・・・J列に個別番号 が入っています。 ※1行目に項目名などのヘッダーは持っていません。 その地域番号をファイル名に持ったcsvファイルがいくつもあり、 地域番号が一致するcsvファイルの中と突合させたいです。 ただし、Book1(エクセルファイル)のA列には 複数の地域番号があり、 その地域番号に適用するcsvファイルもそれぞれあります。 尚、csvファイルの構成は カンマ区切りのUTF-8で、 同じくヘッダーはありません。 1列目に地域番号、6列目に個別番号が入っています。 この地域番号+個別番号が一致し 且つ、53列目以降(より右列)に"■"という文字の有無 ※"■"の場所は、53列より右ということ以外、位置の決まりがありません。 更に、"■"が有る場合は、その2列先にある22桁の数字(半角文字列)を Book1のT列に転記(無い場合はスキップ) したいのですが、どのようにしたら実装可能でしょうか? うまく説明できておりませんでしたら 補足させていただきますので、 ご教示のほど よろしくお願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

<処理パターンに影響する問題> CSVファイルの数(とそれらの行数合計)とエクセルファイルの行数はどれくらいか?量的な問題。 毎日この作業はあるのか、1か月1回ぐらいか?作業(実行)頻度の問題。 ーー <ITF-8問題> >カンマ区切りのUTF-8 Excel 2016でUTF-8のCSVファイルがサポートされるようになりました。 だから、エクセルのバージョンを質問に書け。 ーー ExcelでUTF-8のCSVデータを取り込む方法 http://www.koikikukan.com/archives/2017/03/24-000300.php これをマクロの記録でもとって、VBA化するか。 2013以前だと、ややこしいようだ。 ーー UTF-8のCSVをエクセルファイルの1シートにまとめてはどうか? まとめると、重複キーなどが出現するか? === <処理ロジック> 質問文を読んで、よく頭に入らない。頭がくらくらする。 文章(箇条書き的なもの)で、「ブロック図」でも書いて、処理内容を整理したら、どうだろう。 並び順はどうか、検索はFindで済むか、キーは何か、そのキーは重複するものが現れるか、を意識して書く。 >突合させたいです 突合させたとして、その後何をするの。両者の表示? ーー シートのA列の「地域番号」で、同名の複数のCSVを見つける、として 個別番号は、シートのA列か、その他の列にあるのか。 1つのシートの地域番号ーーーCSVで同じシートの地域番号ーー個別番号1 から検索        ーーCSVで同じシートの地域番号ーー個別番号2              ーーCSVで同じシートの地域番号ーー個別番号3            ・・・ このイメージからメイン処理が始まるのか?    ーー 且つ、53列目以降(よ・・ は定位置(決まった列)に設定し直し(ダブりデータを)てはどうか。 ==== こんな、会社なりの個別の事情の課題を、それもVBAの問題を、このコーナーに丸投げするのは、行き過ぎではないか。 データ内容が、わからない上に、テストデータもなく、作成に相当時間がかると予想。 質問者が、内容をかみ砕いて、判らない問題点をしぼれないようなら、業者に頼むべき問題では。初心者がやる問題ではないと思う。 ーー 検索が複雑になると、エクセルの独自機能よりも、SQLなどが使えるACCESSのVBAなどの方がよいのではないか。どうせ、エクセルVBAでも、本来相当勉強しなおしが必要なレベルだろうから。

aka_ao
質問者

お礼

すみませんでした。 出直します。

すると、全ての回答が全文表示されます。
回答No.1

まず、この手の自動化ツールを作る場合、「どういう処理をするか」をまとめる(整理する)ことから始めるのが定石です。その場合、「手作業でやるなら」どうするか、から始めると良いでしょう。 お問い合わせのような作業なら、 1.上から1行づつ順に処理する 2. A列を見て、対応するCSVを開く 3. CSVを1行目から順にチェックする 4.  まず、地域番号と個別番号が一致するか調べる 5.  一致したら、■の云々をチェックする 6.  これも条件を満たしたら、当該部分をブックのT列に転記する 7. これを全行繰り返す 8.これを全行繰り返す というような感じになります。 その上で、一つ一つの処理をコード化してゆきます。 個々のコード化は詳細な条件がわかりませんし、それぞれ1件の質問に匹敵しますから、割愛します。 なお、ご参考まで、Excel VBAでCSVファイルを扱う方法は大きく二つあって、 1.ExcelでCSVを開いて処理する 2.VBAから、ファイル操作命令を使って処理する 方法があります。 どちらがいいかはファイルの条件などによりますが、1の方がコード化が直感的にできると思いますので良いかと思います。具体的にはWorkbooks.Open ステートメントなどを使いますが、これも詳細は割愛します。下記URLなどを参照して下さい。 https://www.moug.net/tech/exvba/0060086.html 以上、ご参考まで。

aka_ao
質問者

お礼

参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A