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

解決済みの質問

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

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

例:Aフォルダ内にファイル1、ファイル2、ファイル3、、、と複数のファイルがある。ファイルのフォーマットはすべて同じでデータのみが異なる。ファイルにはシートは一つのみ。

ファイルのイメージは
     A    B    C     D 
1行目 名称   価格   味    評価 ←全ファイル共通
2行目 いちご  100円  おいしい   A
3行目 りんご  200円  まずい    C



これらのファイルから、例えば「いちご」という文字が含まれているセルがある行を抽出して一覧を作りたいです。

もし可能であれば、検索条件として、
一行に 「いちご」かつ「A」を含む や「いちご」または「おいしい」を含む など の絞込みができる機能があれば助かります。

マクロは初心者のため、自分でこのようなものを作ることができません。どうぞお知恵をおかしください。よろしくお願いいたします。

投稿日時 - 2008-11-19 03:07:53

QNo.4490303

困ってます

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

No.2のyorisinです。
バッチはExcelではなく、超お手軽なプログラムと思ってください。

たとえば今回の例では、アスタリスク(*)の中をメモ帳にコピーして、
拡張子を[bat]で保存すればこれでプログラムの完成です。
********************

@echo off
echo 検索結果>result.csv
type %2 | find "%1">>result.csv

echo 検索終了
@pause

********************

このプログラムを動かす場合には、コマンドプロンプトを開き、
(スタートメニュー→プログラム→アクセサリ→コマンドプロンプト)

黒い画面に保存したバッチファイル(拡張子=bat)をドラッグアンドドロップ
→半角スペースを入れて検索したい文字を入力
→半角スペースを入れて検索対象のCSVファイルをドラッグアンドドロップ
→エンターキー
で、自動的に検索したい文字列を含む行を出力します。

投稿日時 - 2008-11-24 15:23:12

お礼

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

投稿日時 - 2008-11-29 14:45:26

ANo.3

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

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

回答(3)

ANo.2

ファイルをCSVファイルで出力し、バッチで検索してみてはどうでしょうか?
このようなバッチで指定した文書のある行だけを別ファイルに出力できます。

@echo off
echo 検索結果>result.csv
type %2 | find "%1">>result.csv

echo 検索終了
@pause


上記内容のバッチを、作成し検索するファイルと同じ場所に置いて、
コマンドプロンプトから
[バッチファイル名] [検索文字列] [検索するファイル名]
とすれば、result.csvに検索文字列の含まれる行全てが出力されます。

ExcelデータのCVS出力は[ファイル名を指定して保存]から選択できます。

投稿日時 - 2008-11-19 17:05:48

お礼

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

投稿日時 - 2008-11-24 00:12:41

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

投稿日時 - 2008-11-19 11:52:07

お礼

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

投稿日時 - 2008-11-24 00:11:05

あなたにオススメの質問