[[20190806091608]] 『マクロを使用した 検索キーワードを含む「行」の』(yomogi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロを使用した 検索キーワードを含む「行」の表示について』(yomogi)

いつも拝見し勉強させていただいております。
本日は以下の内容が可能となるマクロを教えていただきたく存じます。
まだまだ未熟ものですので、説明に足りないようであればご容赦ください。
どうぞ宜しくお願い致します。

【データについて】
 1. A5〜F50 のセルには全てデータが入力されています
 2. F5〜F50 のセルにはコメント(日本語)がそれぞれ記入されています
 3. A4〜F4 はタイトル(項目)行になっています

【行いたいこと】

 1.キーワードを入力すると F5〜F50 のコメントに該当する「行」が
  全て表示されます。

 2.オートフィルタは使用しない方法で行いたいと思っています

 3.キーワードは単語ではなく一部の文字一致でもOKとします

 4.キーワードは一つではなく、複数指定でさらに絞り込めるように
  したいです

 5.現在は50行しかデータが入力されていませんが、
   データは下にどんどん追加されます
  ※列(項目)は追加されません

 
 
【操作について】

 1. シートのどこかに「検索」ボタンを作成する
 2.「検索」ボタンをクリックすると、
   検索キーワード入力用のポップアップ画面が表示され、
   その画面にキーワードを入力すると
   「タイトル行」と該当「行」のみが表示されます。
 3.さらに絞り込み追加のダイアログが表示され、
   絞り込みキーワードを入力することで、
   絞り込み追加された該当「行」のみが表示されます

 何卒、宜しくお願い申し上げます。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


回答ではありません

・オートフィルターを使わない理由を教えてください
・絞り込みが終了した後、元データを表示させることは考えていますか?
・延々と絞り込みを行うのでしょうか?

(渡辺ひかる) 2019/08/06(火) 12:32


Sub main()
    Dim ip As String, c As Range
    Rows("1:" & Rows.Count).EntireRow.Hidden = False
    Do
        ip = InputBox("キーワード入力してください")
        If Trim(ip) = "" Then Exit Sub
        For Each c In Range("F5:F" & Rows.Count).SpecialCells(2).SpecialCells(12)
            If InStr(c.Value, ip) = 0 Then
                c.EntireRow.Hidden = True
            End If
        Next c
        If MsgBox("さらに絞り込みますか?", 36) = 7 Then Exit Sub
    Loop
End Sub
(mm) 2019/08/06(火) 13:09

■1
これはマクロの作成依頼でしょうか?
そうであれば私は興味が無いのでパスしますが、自分で作る場合のアドバイスを求めている場合、完成していなくとも、現状のコードを見せていただくとアドバイスできることがあるかもしれません。

■2
>1.キーワードを入力すると F5〜F50 のコメントに該当する「行」が
> 全て表示されます。
>2.オートフィルタは使用しない方法で行いたいと思っています
コメントを対象にする場合、そもそもオートフィルタは使えないとおもいます。

■3
2とも関連しますが、"検索"であればコメントを対象にできるので試してみてはどうでしょうか?
https://www.moug.net/tech/exvba/0050116.html
http://officetanaka.net/excel/vba/tips/tips123.htm

■4
作成する場合のアイデアを提供します。

 1. inputboxなどで検索値を取得する
 2. F5〜F50を対象にFindメソッドなどで該当するセルをすべて探す
 3. タイトル行以外を非表示にする
 4. 2で【見つかったセル】を含む行を再表示する

 (絞り込む場合)
 5. inputboxなどで検索値を取得する 
 6. 2で【見つかったセル】を対象にFindメソッドなどで該当するセルをすべて探す
 7. タイトル行以外を非表示にする
 8. 5で【見つかったセル】を含む行を再表示する

(もこな2) 2019/08/06(火) 13:16


もこな2さん

多分 「コメント」はセル内の文字列であって、セルに設定できる「コメント」ではないような・・・

(渡辺ひかる) 2019/08/06(火) 13:25


みなさま
返事が遅くなり申し訳ありません。
マクロはほとんど知識がなく、正直に言うと、マクロ作成願いたい半分、勉強してみたい半分です。
とりあえず、みなさまからいただいたアドバイスをもとに自分なりに作成してみます。

追加ですが、該当の行のみが表示されたあとは、再び全データリストに戻ることを考えております。
また、オートフィルターを使わない理由は、出来上がったファイルを複数の人が利用することを考えて
いますが、エクセルのレベルに差があり、オートフィルタをうまく使いこなせない人もいるので、
視覚的な操作が出来るようにしたいからです。

よろしくお願いします。
(yomogi) 2019/08/07(水) 00:04


■1
作成依頼なら私は降りるので返答不要ですが、結局
>2. F5〜F50 のセルにはコメント(日本語)がそれぞれ記入されています
↑はセルのコメントなのか、直接値として書いているのかどちらでしょうか?

■2
>オートフィルターを使わない理由〜
言っていることがよくわかりません。
オートフィルタの設定、抽出はマクロでやることになるから、ユーザーの技量?は関係ないと思われます。

>出来上がったファイルを複数の人が利用する
こちらも意味がよく理解できません。
抽出結果を印刷するのであれば、オートフィルタでも困らないでしょうし、抽出結果をほかのシートにコピーするとかなら、むしろオートフィルタのほうが楽ちんだと思います。
(SpecialCells使えば大差はないかもしれませんが。。。)

■3
>自分なりに作成してみます。
1、2に絡みますが、私が提示した方法の場合、理屈上はセルの値でもコメントの場合でも対処は可能と思います。
ただ、オートフィルタを同シートの別表?で使用しているとか、セルのコメントを対象に抽出したいとかでなければ、苦労して劣化オートフィルタをイチから作るのではなく、使えるものは使ったほうが、楽に作成できるとおもいます。

(もこな2) 2019/08/07(水) 04:37


 yomogiさん
 下記コードはFilterを使用していますが恐らく気が付かないと思いますよ?
 ViewAlllの方は全行表示

 Sub FilterColF()
     Dim txt As String, temp As String
     With Range("f4", Range("f" & Rows.Count).End(xlUp))
         If .Parent.FilterMode Then .Parent.ShowAllData
         Do
             txt = InputBox("検索文字(列)")
             If txt = "" Then [h2].Clear: Exit Do
             temp = [h2].Formula
             [h2].Formula = temp & IIf(temp = "", "=", "*") & "isnumber(search(""" & txt & """,f5))"
             .AdvancedFilter 1, [h1:h2]
         Loop
     End With
 End Sub

 Sub ViewAll()
     If ActiveSheet.Filtermode Then ActiveSheet.ShowAllData
 End Sub
(seiya) 2019/08/07(水) 12:38

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.