こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

いつも大変お世話になっております。
初心者につき、ご教示いただけますと幸いです。

エクセルBook1というファイルに
A列に地域番号・・・J列に個別番号 が入っています。
※1行目に項目名などのヘッダーは持っていません。

その地域番号をファイル名に持ったcsvファイルがいくつもあり、
地域番号が一致するcsvファイルの中と突合させたいです。
ただし、Book1(エクセルファイル)のA列には
複数の地域番号があり、
その地域番号に適用するcsvファイルもそれぞれあります。

尚、csvファイルの構成は
カンマ区切りのUTF-8で、
同じくヘッダーはありません。
1列目に地域番号、6列目に個別番号が入っています。
この地域番号+個別番号が一致し
且つ、53列目以降(より右列)に"■"という文字の有無
※"■"の場所は、53列より右ということ以外、位置の決まりがありません。

更に、"■"が有る場合は、その2列先にある22桁の数字(半角文字列)を
Book1のT列に転記(無い場合はスキップ)
したいのですが、どのようにしたら実装可能でしょうか?

うまく説明できておりませんでしたら
補足させていただきますので、
ご教示のほど よろしくお願い致します。

投稿日時 - 2019-07-11 05:02:36

QNo.9634119

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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でも、本来相当勉強しなおしが必要なレベルだろうから。

投稿日時 - 2019-07-11 12:13:17

お礼

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

投稿日時 - 2019-07-11 19:33:16

ANo.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

以上、ご参考まで。

投稿日時 - 2019-07-11 07:47:02

お礼

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

投稿日時 - 2019-07-11 19:37:40

あなたにオススメの質問