• ベストアンサー

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

ひとつのフォルダの中にファイルが複数あります。これらのファイルを開かずに文字列を検索し、検索対象の文字がある行をまどめてひとつのファイルに抽出したいです。 例: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

  • csvファイルを開かずに文字を検索し行を抽出したい

    フォルダの中に複数のCSVファイルが有ります。 これらのファイルを開かずに文字列を検索し、検索対象の文字と完全一致する 文字がある行をまとめてひとつのファイルに抽出する方法を探しています。 例:Aフォルダ内にファイル1、ファイル2、ファイル3、、、と複数のファイルがある。 ファイルのフォーマットはすべてCSV。ファイルにはシートは一つのみ。日付なのですべて異なります。       A         B  C   D   E   F  G   H   I   J  K   L 加工年月日時分 品種 コード A列 B列 C列 D列 E列 F列 G列 本数 作業者    ・    ・    ・ A~Lまであり、Cのコードが指定した検索文字と完全一致するものを抽出したいです。 急ぎの内容の為、VBAやコマンドプロンプトなど、自分なりに色々なサイトにある プログラムを組み換えようとしましたが初心者の為すぐに理解して応用はとても 無理でした。知恵を貸して頂きたいです。

  • VLOOKUPのような検索で複数ヒットしたら全て抽出したい

    Sheet1      A    B       1. 600円 イチゴ       2. 550円 みかん       3. 380円 イチゴ       4. 400円 りんご       5. 650円 イチゴ       6. 250円 りんご Sheet2      A ......B........C..........D..........E       1. イチゴ 600円 380円 650円       2. みかん 550円       3. りんご 400円 250円 Sheet2のA1イチゴでSheet1のB列検索して、ヒットしたA列の値段をSheet2のB1に表示する。この時、検索結果が複数あった場合、2個目をC1 3個目をD1に表示する。(max10個入れたいです) 次はA2のみかんで検索する。 イチゴのような種類が2000個あるので関数で自動検索したいのですが よろしくお願い致します。

  • エクセル:文字列間の行を抽出

    エクセルファイルで1つのシートに複数の表がひたすら縦に並んでいます。それぞれの表が別々のシートに記載されるようにしたいと思っています。 どの表も基本的な書式は同じなので列数は同じなのですが、行数は表ごとに異なります。 また各表の右下(C列)にTotalという文字列が必ずあります。 文字列Totalがある行の直下の行から次のTotalのある行まで抽出して、シートを作成できれば良いのだと思うのですが、どうすれば可能になるのか分かりません。 どなたか教えていただけ無いでしょうか。

  • 【エクセル】範囲指定をして文字を検索したい

    複数列よりある文字を検索し、該当すれば●を返すということを したいのです。 例えば、B:Cの範囲にイチゴがあれば●を返すとします。   A   B   C   D   E 1    なし イチゴ     2    ミカン  なし  3    リンゴ なし とりあえずは、作業列でCOUNTIFを使って数を数え、それを参照して●を 表示させているのですが、一回で計算させる方法があれば教えてください。 よろしくお願いします。  

  • テキストファイルから指定行をExcelに抽出したい。

    「WindowsXP」/「Office2003Professional」を使用しています。 一つのフォルダに格納された複数のテキストファイルから、指定した文字列を含んだ行だけをExcelに抽出し、一覧表にする方法を教えて下さい。 各テキストファイルの抽出したい部分は以下のようになっています。(一部抜粋) ------------------ +製造元 *NEC +型番 *ABC-000 +メモリMAX *512GB +スロット数 *2 +DIMM1 *256 MB *333MHz +DIMM2 *256 MB *333MHz ------------------ 文字の先頭に[+]がついているものが検索文字列で、[*]が抜き出したいデータ部分です。 (実際のテキストでは[+]や[*]は書いてありません。) これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出し全テキストファイルを一覧表にしたいと思っています。(行列反転した表) ------------------     A        B    C    D       E       F     G 1 ファイル名 製造元   型番  メモリMAX スロット数  DIMM1   DIMM2 … 2 aaa.txt NEC   ABC-000  512MB     2 256MB   256MB 3 bbb.txt FUJITU FMV10 1024MB 2 512MB                ・                ・ ------------------ ●テキストファイルの検索文字列とデータの間には半角スペースが入っています。 ●テキストファイルの検索文字列の行位置はファイルごとに異なります。 ●テキストファイルの検索文字列の中にはファイルによっては存在しない文字列もあります。 ●ExcelのA列にはフォルダ内のファイル名が予め全て入力されています。 もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。

  • エクセル 複数行にまたがっているデーターを一つの行にまとめたい

          A列  B列   C列 1行目  佐藤 北海道 りんご 2行目  佐藤 北海道 ばなな   3行目 伊藤  東京  いちご 4行目  伊藤  東京  ばなな  上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列 1行目  佐藤 北海道  りんごばなな 2行目  伊藤  東京   いちごばなな A列とB列のデーターが同じでC列のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

  • Win8で1文字でファイルを検索する方法

    フォルダの中に画像ファイル例えば、IMG_1234abcdという名前のファイルがあります Win8を使っているんですが、このファイルを検索するときに、このファイルが入っているフォルダを開くと、右上に虫眼鏡のブランクがあり、そこに、cとかdとか1文字だけいれてもファイルがありませんとなり、抽出されません。 たしめに、iとうっても見つかりません 最終的には、a,b,c,dどの文字をうっても抽出されるようにしたいのですがどうすればいいですか?

  • エクセルで特定の文字を含んだものを抽出するには

    エクセルで、sheet1のA1からA100に入力された文字があるとします。 sheet2のA1に抽出したい文字をいれると、sheet2のA2以下に抽出したい文字を含んだ行を抽出したいのですが可能でしょうか。 例) ■sheet1    A(昇順) 1 あ い 2 あ う 3 あ え 4 い う 5 え あ ■sheet2     A 1 検索条件「あ」 2 「あ」を含む行を自動的に抽出  あ い 3 「あ」を含む行を自動的に抽出  あ う 4 「あ」を含む行を自動的に抽出  あ え 5 「あ」を含む行を自動的に抽出  え あ ※「あ」を含む行だけを抽出したい 宜しくお願いします。 相談をして申し訳ございませんが、回答を確認するのが明日になります。

  • 下記のマクロはC列5行目から文字の

    下記のマクロはC列5行目から文字の入っている最後の行までの範囲で セル内に蜜柑や林檎、苺の文字が入っていたら同一行のA列にも蜜、林、苺 の文字を入れるというマクロなのですが・・・ たとえばC列12行目が 『蜜柑林檎苺』 となっていた場合、A列に入る言葉は『苺』となり『蜜』『林』という言葉が 消えてしまいます。 そこでこのマクロを少し改造して、 C列が『蜜柑林檎苺』や『蜜柑苺』となっている場合 A列に入る言葉は『蜜林苺』ないし『蜜苺』という風に積み重ねていくように改造はできないでしょうか? ↓この部分を改造すればできるようになりますか? Cells(i, 2).Offset(0, -1).Value = "蜜" Sub 蜜柑林檎苺() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "蜜柑") > 0 Then MsgBox i & "行目アウト!" Cells(i, 2).Offset(0, -1).Value = "蜜" End If If InStr(.Cells(i, "C"), "林檎") > 0 Then MsgBox i & "行目アウト!" Cells(i, 2).Offset(0, -1).Value = "林" End If If InStr(.Cells(i, "C"), "苺") > 0 Then MsgBox i & "行目アウト!" Cells(i, 2).Offset(0, -1).Value = "苺" End If Next i End With End Sub

  • エクセル関数 データの抽出について

    エクセル2010 重複データの抽出。 重複データの抽出方法をご教示ください。 抽出先はシート1のA列A3~抽出データの分だけ リストはシート2のB2:AB32まで フィルターオプションなども使ってみたのですが どうも上手くいきません。 どなたか知恵をお貸しください。 方法はできれば関数だといいのですが(データが増えてもいいように) できなければ他の方法でもいいです。 VBAなどは全くの初心者なので出来れば避けたいのですが… シート2     A    B   C    D~AB32 1  "" 2 いちご ばなな いちご りんご 3 みかん いちご ばなな いちご 4 りんご ばなな いちご みかん 5 みかん いちご ばなな りんご 6 ばなな ばなな りんご いちご : : 32 シート1(重複データなし)  A 1  "" 2  "" 3 いちご 4 みかん 5 りんご 6 ばなな 7 : : 抽出リストのデータはシート2のB2:AB32にぎっしり入っています。 宜しくお願い致します。

専門家に質問してみよう