- ベストアンサー
Excelにて長い文章の中から任意文字列を検索し、リストアップする方法
Excelでの検索およびリストアップの方法について質問させて頂きます。 現在、薬の効能や副作用、禁忌等について勉強中なのですが、 【薬名 容量 適応 副作用 禁忌】の5列を使用して 大まかなリストを作成しております。 この中の適応・副作用・禁忌はいずれも文章形式や ○○・××・△△のような形式で記述されているのですが 同様の効果や副作用をもつ薬を検索する際に その文字列を入力する事によってオートフォームのように 対応する行だけを抜き出して表示するか、 別シートに対応する行だけを表示する機能をつけたいと思っております。 このような場合には、どのようなマクロを使用すればいいのでしょうか。 アドバイスや助言、宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
思われていることと違っていましたらすみませんが、文字列の検索であればあいまい検索(If...Like...then)を使われたらどうでしょうか。 参考までに次のコードをマクロに貼り付けて試してみてください。(Excel2003) 元を壊してはいけないのでコピーしたもので試してみてください。 Altキー押しながらF8キーを押します。 ↓ マクロのダイアログが表示されたらマクロ名に自由に名前を入力してください。(例:抽出) ↓ 名前を入力しましたら、「作成」をクリック ↓ Microsoft Visual Basicの画面が開きますのでSub 抽出()の下に次のコードをコピーして貼り付けてください。 Dim 文字列, シート名 As String Dim 行カウント, 行カウント2, 最大行, スイッチ, フラグ As Long 文字列 = InputBox("検索文字を入力してください。") 文字列 = "*" & 文字列 & "*" シート名 = ActiveSheet.Name Sheets(シート名).Range("A65536").End(xlUp).Select 最大行 = ActiveCell.Row スイッチ = 0 On Error GoTo skip1 Sheets("抽出リスト").Select スイッチ = 1 skip1: If スイッチ = 0 Then '"抽出リスト"シートが無かったら作成する Sheets.Add ActiveWorkbook.ActiveSheet.Name = "抽出リスト" End If Sheets("抽出リスト").Cells.ClearContents 行カウント = 1 行カウント2 = 1 Sheets(シート名).Select Sheets(シート名).Rows(行カウント).Select Selection.Copy Sheets("抽出リスト").Select Sheets("抽出リスト").Rows(行カウント2).Select ActiveSheet.Paste Application.CutCopyMode = False 行カウント = 行カウント + 1 行カウント2 = 行カウント2 + 1 Do フラグ = 0 If Sheets(シート名).Cells(行カウント, 3) Like 文字列 Then '適応の列 フラグ = 1 End If If Sheets(シート名).Cells(行カウント, 4) Like 文字列 Then '副作用の列 フラグ = 1 End If If Sheets(シート名).Cells(行カウント, 5) Like 文字列 Then '禁忌の列 フラグ = 1 End If If フラグ = 1 Then Sheets(シート名).Select Sheets(シート名).Rows(行カウント).Select Selection.Copy Sheets("抽出リスト").Select Sheets("抽出リスト").Rows(行カウント2).Select ActiveSheet.Paste Application.CutCopyMode = False 行カウント2 = 行カウント2 + 1 End If 行カウント = 行カウント + 1 Loop Until 行カウント > 最大行 Sheets("抽出リスト").Select Sheets("抽出リスト").Range("A1").Select MsgBox "抽出しました。" '****コピー貼り付けはここまで **** Microsoft Visual Basicの画面を×で閉じます。 使い方は、Altキー押しながらF8キーを押します。 マクロのダイアログが表示されるのでそのままEnterキーを押します。 抽出したい文字列を聞いてきますので、入力しEnterキーを押します。 抽出シートに抽出されると思います。
その他の回答 (2)
- mitarashi
- ベストアンサー率59% (574/965)
他の回答者の方も言及されておりますが >○○・××・△△のような形式で記述されているのです この部分が、ある決まり切った文字列の検索で良いのか、あるパターンが決まっている記述を検索したいのか等が分からないと、回答のしようがありません。後者の例では、Excel VBAから、VB Scriptの正規表現を使って検索する様な事もできますので、ご参考までにURLを添付します。
お礼
とても参考になるURLをありがとうございました! 今後は質問をさせて頂く際に伝えるべき情報をしっかりと伝え、 アドバイスを頂く身としてあるべき姿勢を取らせて頂きたいと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
質問が具体的でない。模擬実例でも挙げないとわかり難い。 それと薬剤を扱う業務のことは普通は経験してないのだから推察が働きにくい。 ーーー >アドバイスや助言、宜しくお願いいたします。 といいながら、課題を実質丸投げしていると思う。ここはそういう規約のコーナーではないはず。 ーーー 質問者のVBAの技量も判らないが、マクロの記録で、編集ー検索の操作で一部でも処理できるものか、試してみて質問のこと。 ーーー 仕様の要求の場合によると、情報を加工して、ファイル構造(インデックスのようなものほか色々)を作らないといけないものかも知れない。 ーー 有機的な情報検索の仕組みを作るのは、そんなに生易しいものではない。基礎的にもデータベースの知識とか検索アルゴリズムなど勉強することがいっぱい。 オーバーに言えば、最先端のMS社とGoogle社などがが世界の天才的ソフト技術者を集めて、良いものを考えさせている分野。 ーー 質問内容に近い課題を解決する専用ソフトが無いか探すのが先決。 エクセルなどを使ってやっているようでは、先は遠いと予想する。 だから完成仕様要求は極力シンプルにするべきと思う。
お礼
>課題を実質丸投げしていると思う。ここはそういう規約のコーナーではないはず。 >完成仕様要求は極力シンプルにするべきと思う。 お忙しい中貴重なご意見をありがとうございます。 imogasi様がおっしゃられる通り、まずは自分がどこまでできて どこで引っかかってしまったのかについての説明が抜けてしまっていた為に 質問という場を借りて完成された答えを求めてしまうだけになっていました。 今後はご意見を頂ける皆様に対し、 何を必要としての質問であるかが明確に伝わるよう 注意を払ってご質問させて頂きたいと思います。 この度は的確なご意見、本当にありがとうございました!
お礼
内容が不明瞭な質問でありながら、 ご丁寧にコードまで付けてくださり本当にありがとうございます! 先ほどkuma3f様のコードを使用させて頂きましたところ 求めていた通りの処理を行う事ができました。 今後はこのコードを参考にしながら 更なる精進をしていきたいと思っております。 この度は本当にありがとうございました!