• 締切済み

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

N5200model05の回答

回答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

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

  • ExcelでのCSVファイルの編集について、

    ExcelでのCSVファイルの編集について、 オートフィルタ機能を使いたいため、 ExcelでCSVファイルの編集しようとしているのですが、ちょっと苦戦しています。。。 私が試してみたこと 1.もとのCSVファイルの拡張子を○○.csv → ○○.txtに変更。   ↓ 2.Excelの「開く」からその○○.txtを読み込む。   ↓ 3.テキストファイルウィザードに従い、   1「カンマやタブなどの区切り文字によって~ 」にチェック   2「区切り文字」→ カンマ、「文字列の引用符」 → "   3「列のデータ形式」 → 文字列 ※090などの数字を、90と先頭の0を消されないように 上記のような手順でCSVファイルを取り込み、編集を終え、 保存する時は   「○○.txtにはテキスト(タブ区切り)と互換性のない機能が含まれている可能性があります。    この形式でブックを保存しますか?」 → このまま保存するため「はい」を選択 これでバッチリOK!…かと思われたのですが、 元の編集前の○○.txt は"名前","ヨミ","電話番号1", …… ""とカンマ区切りであったのが、 編集後の○○.txtは名前 ヨミ 電話番号1  …… タブ区切り(?) となってしまっています。 (CSVファイルとしてはタブ区切りでも問題ないのでしょうが…) どうすれば元のカンマ区切りの形式のまま保存できますでしょうか。 アドバイスよろしくお願い致します。

  • ExcelにCSV取り込み時、値がおかしくなる

    思うように再現出来ないため曖昧な質問となってしまうのですが、 ExcelからCSVファイルを取りこむ際、値がおかしくなってしまうことがあります。 それほど大きなデータではなく、セミコロン区切りされた10列50行ほどのデータです。 現象というのが、CSVファイルを取り込んだ際特定の列の値全てが、元のCSVファイルの値と見比べて頭3文字消えています。 CSVファイルでは1234567となっているものがExcelに取り込むと4567となっていたりします。 冒頭で言ったようにうまく再現出来ません。 どなたかご存じの方居られましたらよろしくお願いいたします。

  • 複数CSVファイルからデータ抽出

    CSVファイルのA列(行は問いません)の文字が転記シートのA列(行は問いません)と一致していたら、転記シートのA列が一致した行の空白に、左から順にCSVファイルのA列が一致した行のF列の値を書き込む。CSVファイルの1行A列を転記シートのF列の値を書き込んだ列の1行目に書き込む。 できれば、書き込んだ値はCSVファイルから消したいです。 コピペでやっていたのですが、ずれていてどうしようもなくなりました。 CSVファイル一つ当たり、4000行ほどあり、ファイルは200弱あります。 プログラムを組んでくださると、ありがたいのですが。 質問というよりお願いになってしまいますが、よろしくお願いします。

  • Excel VBA CSVを文字型で読みたいのです

    お世話になります。 Excel2013のVBAでCSVの全項目を文字型として取り込む処理を作ろうとしているのですが、 うまくいきません。 数値項目のゼロが消えてしまいます。 サンプルcsvと、取り込む所だけ抽出したソースを見て頂いて、なんとかなりますでしょうか? よろしくお願いします。 sub test() 'csvのオープンダイアログ varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSV形式(csv形式)の選択") 'ファイル名を取得していなければ終了 If varFileName = False Then Exit Sub '拡張子除いたファイル名でシート作成 pos = InStrRev(varFileName, "\") sname = Mid(varFileName, pos + 1) 'フルパスからファイル名抽出 pos = InStrRev(sname, ".") '最後の.位置を抽出 sname = Mid(sname, 1, pos - 1) 'ファイル名から拡張子除去 '本流ブックに新シートを作成し命名 Set WS1 = Worksheets.Add(After:=Worksheets(Worksheets.Count)) WS1.name = sname 'csvをtmpブックで開く(アクティブ周りの処理の関係で位置を注意) 'お形式で全項目文字で取得Ver Workbooks.OpenText Filename:=varFileName, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array( _ Array(1, 2), Array(2, 2)) end sub test.csv ---------------------- 管理番号 ,注文分類  "0000041836","受注" "0000041841","受注" "0000041842","受注"

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • エクセルVBAで複数CSVを抽出、ブックへの出力

    エクセルVBAで複数のCSVファイルからファイル名と 任意のセル8箇所を自作した計算シートに抽出。 別ブックにCSVファイル名 計算結果4種類を出力する。 というvbaを作りたいのですがどうすればよいでしょうか? CSVファイルが1700ほどあり、大変困っています。 申し訳ありませんがご教授願います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー 詳細 CSV読み込みセル8箇所:B2、D2、F2~P2 自作計算シートへの貼り付け箇所:G3~G10 計算結果セル抽出箇所:C8~F4 出力の理想系は CSVファイル名、計算結果1、2、3、 4の順で file01 ○○ ○○ ○○ ○○ file02 ○○ ○○ ○○ ○○ ・・・ ・・ のようになれば大変嬉しいです。 お力をお貸しください よろしくお願いいたします。

  • ExcelのVBAでCSVを読み込むと通貨になる

    Excel2010のVBAでCSVファイルを読み込んで処理させたいのですが、読み込んだデータをExcelが勝手に別のデータに変えてしまうので困っています。 例えば、123,456というデータは、フィールドにカンマがあるので、CSVでは"123,456"となりますが、これを以下のようなVBAのコードで読み込ませると、書式が通貨として扱われてしまって、データも123456になってしまいます。文字列として読み込まれていれば正しいデータとして読み込まれるように思うのですが、文字列として読み込ませる方法が分かりません。正しく元のデータ123,456のまま読み込ませるにはどうすればいいのでしょうか。 なお、CSVの各フィールドにカンマやダブルクォーテーションが混在していると、各フィールドに分割する処理が複雑でよく分からないので、下記のコードのようにExcelの機能でCSVを各フィールドに分割される方法で読み込ませたいです。 よろしくお願いします。 Workbooks.Open Filename:= "file.csv"

  • csvのデータを複数条件で値を抽出したい

    A列~E列のようなCSVのデータがあり、行に回答者氏名、列に質問番号(Q1~Q3)としてH列~K列のようにそれぞれの質問の回答が表示されるような表を作りたいと思っています。 回答者は500名くらいあるためコピペでは時間がかかりすぎるので関数で出来ないかと試してみているのですが上手くいきません。 どのような関数を使用すれば良いでしょうか?

  • Excelで2つのファイルから完全一致のIDを抽出

    Excelで2つのファイルから完全一致のIDを抽出したいです。 エクセルについて質問です。 バージョンは「2010」です。 2つのエクセルデータ「Aファイル」・「Bファイル」があります。 AファイルとBファイルには顧客データがあり、 Bファイルは「A列…会社名」「B列…担当者名」「C列…取引先ID」「D列…取引先担当者ID」という内容です。(会社名が同じで担当者が2・3人いる場合もあります。) Aファイルの方は新規の顧客とBファイルの顧客と重複してあります。 それで、Aファイルの方に、Bファイルの方から「会社名と担当者名が一致」している取引先IDと取引先担当者IDを入力していきたいんですが、簡単にできる方法があったら教えてください。 (AファイルにはIDの列を2つ新規で作ります。)