複数のワークブックから特定の単語を探すマクロを作る

このQ&Aのポイント
  • 複数のワークブックから特定の単語を探すマクロを作成する方法について説明します。
  • マクロを使用して、複数のファイルの最下部にあるワークブックから指定した単語を探すことができます。
  • 単語を入力したワークブックのファイル名を表示するマクロの作成方法について詳しく解説します。
回答を見る
  • ベストアンサー

複数のワークブックから特定の単語を探すマクロを作る

複数のワークブックから特定の単語を探すマクロを作りたいです。 複数のファイルの最下部にあるファイルから”ネコ”という単語が入力されているワークブックを探し、そのファイル名を表示するマクロを作りたいです。 添付画像で例えるなら 生物>9月>哺乳類>哺乳類.xlsxと生物>9月>魚類>魚類.xlsxから”ネコ”という単語が入力されているワークブックを探すマクロです。 10月になったら、9月ファイルの下に10月ファイル、翌日には哺乳類ファイルの下に哺乳類0902というファイルができたりするなど、翌月、翌日には新しいファイルが追加される状況なので、 最下部のファイルを指定して探す必要があります。 調べてみましたがわかりません。何卒宜しくお願い致します。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.2

>複数のファイルの最下部にあるファイル とは、 下階層にフォルダーを持たないフォルダー、 このフォルダーに格納されたファイルたちという意味ですか? それとも このフォルダーに格納されたファイルたちの内、 更新日時が最新のファイルですか? 前者なら こんな感じでいかがでしょうか。 なお、部分一致で検索しています。 また、指定フォルダー以下には エクセルで開くことのできるブックしか無い前提で かつ、複数シートの場合は全てのシートを検索しています。 求めが異なるようなら指摘して下さい。 Option Explicit Const tgDir = "D:\Test"  '検索対象の親フォルダー Dim PutLine As Long Dim startCell As Range '//-------------------- Sub Sample()  Dim maxRow As Long  Dim maxCol As Long  'フルパスの出力開始位置を定義  Set startCell = ThisWorkbook.Sheets(1).Cells(2, 3)  '出力先をクリア  maxRow = startCell.SpecialCells(xlLastCell).Row  maxCol = startCell.SpecialCells(xlLastCell).Column  Range(startCell, Cells(maxRow, maxCol)).ClearContents  PutLine = 0    Call getFileList(tgDir, "ネコ")  '検索文字列 End Sub '//-------------------- Sub getFileList(searchPath As String, KeyWord As String)  Dim FSO As New FileSystemObject  Dim objFiles As File  Dim objFolders As Folder  Dim Folders As Long  Dim tgBook As Workbook  Dim Myrng As Range  Dim WS As Worksheet    '下階層のフォルダーの有無を判定  Folders = 0  For Each objFolders In FSO.GetFolder(searchPath).SubFolders   Folders = Folders + 1   Exit For  Next    '下階層にフォルダーが無かったら  If Folders = 0 Then   For Each objFiles In FSO.GetFolder(searchPath).Files    Set tgBook = Workbooks.Open(objFiles.Path)    For Each WS In tgBook.Worksheets     Set Myrng = WS.Cells.Find(KeyWord)     If Not (Myrng Is Nothing) Then      'MsgBox Myrng.Address      startCell.Offset(PutLine, 0).Value = objFiles.Path      PutLine = PutLine + 1      Exit For     End If    Next WS    tgBook.Close   Next  End If    'サブフォルダ取得  For Each objFolders In FSO.GetFolder(searchPath).SubFolders   Call getFileList(objFolders.Path, KeyWord)  Next End Sub

kokokuja
質問者

お礼

ありがとうございます

その他の回答 (1)

  • kon555
  • ベストアンサー率52% (1754/3367)
回答No.1

まず重要な点として「最下部のファイル」は各々のPC(というかフォルダ)のソート設定が変化するため、ファイル検索の目印としては使用できません。 一度検索したファイルは対象外とするなら、一度検索したファイルを記録しておき、ソレを除外して検索するマクロを組むべきでしょうね。 ただ、もし一度検索したファイルであっても、更新等で追加されるというなら対象とすべきですし、作業時間に余裕があるなら、いっそ毎回1から検索したほうがいいかもしれません。 この辺りは貴方の業務環境次第ですので、ご自身で組み立てるしかないと思います。 ひとまず参考になりそうなページを置いておきます。多分この辺りを見ながらやってみれば、それなりの苦労で組めると思いますよ。 http://officetanaka.net/excel/vba/tips/tips36.htm https://www.moug.net/tech/exvba/0050051.html

kokokuja
質問者

お礼

ありがとうございます

関連するQ&A

  • エクセルワークブックの数だけ処理を繰り返したいです

    excel vba(マクロ)についての質問です。 元のフォルダには、複数の.xlsxのワークブックがあります。この各ワークブックのワークシート1のA1に”〇月見積書”と記載があり、これらを元のフォルダと同じフォルダに各ワークブックのワークシート1のA1に記載があるファイル名にし、かつ、csvにして保存し、同じファイル名になったら、連番にしたいです。 例えば、"11月見積書(1)"の様に。そして、元の.xlsxの数だけ連番にしたいです。 元のフォルダにある.xlsxをカウントしてその分だけ繰り返せばいいと思うのですが、連番が永遠と繰り返されてしまい、出来ません。 各.xlsxをワークブックのワークシート1のA1に記載があるファイル名にし、そして、この.xlsxの分だけ.csvに変換するには、どうすればいいでしょうか? dim f as string dam i as long dim tem as string tem = thisworkbook.sheets(1).range("A1") & "¥" f = dir(tem) if f ="" then f= tem else do while f<>"" i = i+1 f= dir(tem& "(" & i &")" & ".csv") loop f =tem & "(" & i &")" & ".csv" end if activeworkbook.save as filename:=tem & "(" & i &")" & ".csv" お手数ですが、宜しくお願い致します。

  • マクロで参照するファイルの拡張子

    マクロを使って集計作業をしています。 マクロでは複数のファイルから"vlook up"を使ってデータを参照しています。 今回参照するExcelファイルの拡張子が「xls」から「xlsx」に変わったのですが、 マクロを走らせるとエラーになりデバッグが立ち上がります。 マクロの編集で参照するファイルの拡張子を「xlsx」に変更したのですが、 やはりエラーとなり、集計がストップしてしまいます。 どうデバッグすれば良いのか分かりません。 そもそも「xlsx」の拡張子ではマクロが正常に動かないものなのでしょうか。

  • EXCELマクロが正常に動作したりしなかったりする

    Office2007でEXCELのマクロを使用して、マクロ付のEXCELを開くと、決まった位置にあるDATファイルを読込、その内容を基に計算等を行い、結果をEXCELのシートの決まった位置に転記して、そのシートを新規のワークブックにコピーするという処理を行っています。 複数のPCで正常に動作するのですか、一部のPCで正常に動作せず、マクロ自体は起動しているみたいなのですが、DATファイルの内容がそのままEXCELに転記され、新規のワークブックにコピーされます。ワークブックやシートの名前もDATファイル名になってしまっています。ただし、10回に1回くらいの割合で正常に動作します。 また、11月位まで正常に動作していたのに、12月位から突然正常に動作しなくなったPCもあります。 マクロのセキュリティ設定を疑いましたが、「すべて有効」になっており、なにが原因でこのような状態になっているのか皆目見当がつきません。 原因及び対処方法をご存じの方、ご教授ねがえないでしょうか。 よろしくお願いします。

  • 複数ファイルのデータを1つのファイルへ纏めるマクロ

    マクロの実行で、Excel形式の約400個のファイル中のデータを1つの出力ファイルへ纏める為のマクロを作成したいのですが、VBAの初心者で、スクリプトの書き方が分からず大変困っております。 入力ファイルの中身は頻繁に追加、削除を繰り返しており、そのたびに入力ファイルを目視確認後、出力ファイルを手動で修正している状況でございます。 大変お手数ですが、マクロがお分かりの方がいらっしゃいましたら、ご教示を宜しくお願い致します。 ・入力ファイルは、以下ような名前になっております。 課題参加者_23RF3001.xlsx 課題参加者_23RF3005.xlsx 課題参加者_23RF3072★.xlsx 課題参加者_23RF3073.xlsx 課題参加者_23RF3199.xlsx 課題参加者_23RF3543.xlsx ・入力ファイルのデータは、添付しました画面イメージの通りで、  フォーマットは全て同じです。 ・出力ファイルに吐き出す入力データはB列~K列とN列になります。 ・出力ファイルのタイトルは、1番目に呼び出したファイルのB列~K列とN列を使う。 ・出力ファイルのA列のデータは、入力ファイル名の『23RF3001』、『23RF3543』などを入力データ分入れる。 ・出力ファイルのタイトルに使う、入力ファイルのタイトルは以下のようになっています。   B列~E列のタイトルは、6行目、7行目が結合されたセルに入っています。  F列のタイトルは、5行目、6行目、7行目が結合したセルに入っています。  G列~H列のタイトルは、6行目、7行目が結合されたセルに入っています。  I列~K列のタイトルは、7行目のセルに入っています。  N列のタイトルは、6行目、7行目が結合されたセルに入っています。 ・出力ファイルへ吐き出したい、入力ファイルデータの範囲は、  B列~K列の8行目以降とN列の8行目以降のデータになりますが、  『職員番号』、『名前』、『部門』に記載が有る行のみを出力ファイルへ吐き出します。  N列はリストの最後の行まで文字が入力されていますが、  N列についても、上記の『職員番号』、『名前』、『部門』に記載が有る行のみを出力ファイルへ吐き出します。 ・出力データへ吐き出す時の書式フォーマットは以下の通りになります。  A列=文字形式  B列=数値形式  C列~F列=文字形式  G列、H列=日付形式  I列~K列=チェックボックス(フォームコントロール形式(入力データと同じ形式))  N列=文字形式 ・入力データは今の所50行まで入力可能としています。

  • 一枚ずつ印刷用のマクロに複数枚設定したい

    一枚ずつ印刷用のマクロに複数枚設定したい。マクロ初心者です。Excel2007のマクロシー トを使っています。作成者は他人ですので、質問ができません。複数のシートからなるExcelファイルで、シート1に入力したシーケンス番号を2のシートのマクロを起動してポップアップに入力すると、シート1の内容が反映された印刷用のフォーマットが1枚ずつ作成されるマクロがあります。シーケンス番号は200ほどあり、ひとつひとつ設定していると時間がかかるため、シーケンス番号の範囲を指定するなどして、印刷を一気に行う方法はありませんでしょうか?質問等に不備がございましたらお知らせください。よろしくお願いいたします。

  • 複数の単語を一度に登録できない

    Windows XP IME2002です 複数の単語をメモ帳に「単語」「読み」「品詞」を「タブ」で順に入力し、「.txt」形式でマイドキュメントに保存して 「辞書ツール」を開き、「ツール」「テキストファイルからの登録」 「ファイルの保存場所」「登録するテキストファイル」を選択してクリックすると「テキストファイルからの登録」ダイアログに失敗と表示され登録できません。 原因又は登録方法をを教えてください

  • 複数のExcelファイルから値を引っ張ってくる

    いろいろ調べたのですが、いまいちよくわからなかったので教えてください。よろしくお願いします。 複数のエクセルファイルから値を引っ張ってきて、計算をしたいのですが、そのようなことは可能でしょうか? 例えば、 Sample1.xlsxのsheet1のC列にはA列とB列を足すという式が入っている。 Sample1.xlsxのsheet1のA列には、Sample2.xlsxのA列の値を、 Sample1.xlsxのsheet1のB列には、Sample3.xlsxのA列の値を、 参照してきて入れたいということです。 Sample2や3を変更したときには、Sample1の値にも反映してほしいです。 可能ならば、参照するファイルやシートを自由に決定できると良いです。 説明が下手で申し訳ありませんが、よろしくお願いいたします。 なお、マクロ等はまだ初心者です。

  • 【VBA】マクロについて

    【VBA】マクロについて質問です。 マクロで複数のシートの特定のセル(A5(日付)、A7(社名)、B3(担当者)など)を別ブックのひとつのシートにまとめて、 日付 社名 担当者 シート1 A5 A7 B3 シート2 A5 A7 B3 シート3 A5 A7 B3 のように下へ下へ積み上げていくにはどうゆうマクロを組めばいいでしょうか。 同じ作業を複数のファイルで行わなければいけないため、マクロを組みたいのですが、よくわかりません>< ファイルによってシートの数が違うので、それにも対応すると有難いです。 どうぞよろしくお願いいたします。

  • WinXP/Excel2002 でマクロ初級者です

    現在、仕事でexcelファイルAに、シート1枚につき1日分のデータを入力しています。 sheet1⇒7/1、sheet2⇒7/2、という風に。 その入力したデータを、1週間ごとにクライアントに報告するため、 別のexcelファイルBの1sheet内に決まったフォーマットにて、 手入力で入力しています。 ファイルAの各シートの中の決まった複数のセルの値をコピーして、 ファイルBの各シートの中の決まった複数のセルにそれぞれ貼り付ける作業を マクロを組んでボタン1つで実行したいと思っているのですが、 そのようなことは可能でしょうか?また、上記のマクロを以下の条件のもとで可能ですか? ・ファイルAとファイルBの格納場所は、同じサーバ内の別のフォルダ内 に保管されています。 ・マクロ実行する際、それぞれのファイルA,Bをその都度起動しないで、 ファイルAの指定したセルの値をファイルBの指定したセルへ反映したいです。 ・ファイルCにマクロボタンをつけてマクロを組み、実行したいので、マクロ実行時には、  ファイルCだけ、その都度起動したいです。 ・そのファイルCの保管場所は、ファイルBと同じフォルダ内に入れたいです。 例) Aの格納場所:\\ServerA\C_社内\週報\7月\週報(7月第1週).xls Bの格納場所:\\ServerA\C_社内\日別集計\7月\週報(7月第1週).xls Cの格納場所:\\ServerA\C_社内\週報\7月\週報マクロ.xls 説明が分かりにくくてすみません。 ご教授のほど宜しくお願いいたします。

  • 複数単語の一括検索,置換フリーソフト

    Wordファイルまたはプレインテキストファイル(1ファイル単位でいいです)にある 複数の文字列(できれば,ワイルドカード使いたい)を一括検索(蛍光表示,反転表示など)または,一括置換できるフリーソフトはありませんか. イメージとしては,複数の対象単語等文字列リストを, 。 . 下さい ください 一つ ひとつ 但し ただし などで,スペースやカンマで,検索単語と置換単語を区切った置換辞書リストを事前に 準備して,対象ファイルを入力して検索,置換できるようなイメージです.

専門家に質問してみよう