• ベストアンサー

エクセルでファイルを開かずに文字を検索し、行を抽出したい

ひとつのフォルダの中にファイルが複数あります。これらのファイルを開かずに文字列を検索し、検索対象の文字がある行をまどめてひとつのファイルに抽出したいです。 例:Aフォルダ内にファイル1、ファイル2、ファイル3、、、と複数のファイルがある。ファイルのフォーマットはすべて同じでデータのみが異なる。ファイルにはシートは一つのみ。 ファイルのイメージは      A    B    C     D  1行目 名称   価格   味    評価 ←全ファイル共通 2行目 いちご  100円  おいしい   A 3行目 りんご  200円  まずい    C ・ ・ ・ これらのファイルから、例えば「いちご」という文字が含まれているセルがある行を抽出して一覧を作りたいです。 もし可能であれば、検索条件として、 一行に 「いちご」かつ「A」を含む や「いちご」または「おいしい」を含む など の絞込みができる機能があれば助かります。 マクロは初心者のため、自分でこのようなものを作ることができません。どうぞお知恵をおかしください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.3

No.2のyorisinです。 バッチはExcelではなく、超お手軽なプログラムと思ってください。 たとえば今回の例では、アスタリスク(*)の中をメモ帳にコピーして、 拡張子を[bat]で保存すればこれでプログラムの完成です。 ******************** @echo off echo 検索結果>result.csv type %2 | find "%1">>result.csv echo 検索終了 @pause ******************** このプログラムを動かす場合には、コマンドプロンプトを開き、 (スタートメニュー→プログラム→アクセサリ→コマンドプロンプト) 黒い画面に保存したバッチファイル(拡張子=bat)をドラッグアンドドロップ →半角スペースを入れて検索したい文字を入力 →半角スペースを入れて検索対象のCSVファイルをドラッグアンドドロップ →エンターキー で、自動的に検索したい文字列を含む行を出力します。

akesade
質問者

お礼

ご指示のとおりやったら検索ができました。 どうもありがとうございました。

その他の回答 (2)

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.2

ファイルをCSVファイルで出力し、バッチで検索してみてはどうでしょうか? このようなバッチで指定した文書のある行だけを別ファイルに出力できます。 @echo off echo 検索結果>result.csv type %2 | find "%1">>result.csv echo 検索終了 @pause 上記内容のバッチを、作成し検索するファイルと同じ場所に置いて、 コマンドプロンプトから [バッチファイル名] [検索文字列] [検索するファイル名] とすれば、result.csvに検索文字列の含まれる行全てが出力されます。 ExcelデータのCVS出力は[ファイル名を指定して保存]から選択できます。

akesade
質問者

お礼

ご親切にありがとうございました。 バッチというのがよくわからないため私にはちょっと難しいようです。もっとエクセルを勉強してみたいと思います。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

開かずに取得する方法を存じませんので、開いたファイルが見えないようにして取得してみました。 「いちご」はA列にあるものとしています。 まとめるファイルの標準モジュールにコピペしてやってみてください。 まとめるファイルは取得されるファイルと同一フォルダに保存してください。 Sub test01() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 With wb.ActiveSheet 'wbの開かれたシートについて x = .Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行をxに代入 For i = 1 To x '1~xまで繰り返し If .Cells(i, "A").Value = "いちご" Then '値がヒットしたら n = n + 1 .Rows(i).Copy 'コピー mb.Sheets(1).Rows(n).PasteSpecial 'このブックの最初のシートに貼り付け Application.CutCopyMode = False End If Next i End With wb.Close (False) '保存の有無を聞かずに保存しないで閉じる End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 Set mb = Nothing Set wb = Nothing End Sub

akesade
質問者

お礼

お丁寧にありがとうございました。参考にさせていただきます。 質問の書き方が悪かったのですが、検索する語はいちご以外にもいろいろあります。

関連するQ&A