[EXCEL]キーワード検索リストの作り方COUNTIF

[EXCEL]キーワード検索リストの作り方COUNTIF。Do。VBAで、リストにあるいくつものキーワードを検索したい

お世話になっております
自分で頑張ってみたのですが、力不足で解決しません 助けてください お願いします プロシージャの概要です
?Sheets("2 リスト")には除外キーワードを入力します それをSheets("3 結果")で探します
?Sheets("2 リスト")には、B8:B22の範囲にキーワード入力欄が設けてあります
?Sheets("3 結果")には、一覧表があります そのF列と先ほどのキーワードを照らし合わせて、見つかればF列にhitといれます
?一つキーワード検索が終わったら、続けて次のキーワード検索に行きます キーワードが空になったら終了です

これをやろうと頑張ってみたのですが、一つ目のキーワード検索のFindNextで無限ループにはまります Nothingでも止まってくれません 二重にDo~Loopを使おうとする為なのか、上手く抜け出せません

お手数をおかけしますが、教えてください お願い致します

Sub ループ()

Sheets("2 リスト") Select

Range("B8") Select & x27;B8からループをスタートさせる

Dim i & x27;変数iを宣言
i = 1 & x27;変数iに1を代入
Dim jogai As Variant

Do While ActiveCell <> "" & x27;セルが空白になるまで繰り返す

jogai = ActiveCell Value & x27;処理内容を記載
リストから除外をさがす jogai

& x27;★ループカウンタを初期化
i = 0
i = i + 1 & x27;変数iを1増やす

Loop & x27;Doの処理範囲はここまで
End Sub

& x27;

Sub リストから除外をさがす(jogai)

Sheets("3 結果") Select

Range("F20") Select

Dim FoundCell2 As Range

& x27;F列でキーワードをさがす
Set FoundCell2 = Range("F20:F60000") Find(What:=jogai, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)

キーワードが見つかったらキーワードの場所を選択する
FoundCell2 Select

& x27;Q列に「hit」を入力する
ActiveCell Offset(0, 11) Select & x27;11右へ行き
ActiveCell FormulaR1C1 = "hit"

Do
Set FoundCell2 = Range("F20:F60000") FindNext(FoundCell2) & x27;2回目の検索

& x27;除外が見つかったら除外の場所を選択する
FoundCell2 Select

& x27;除外列に「hit」を入力する
ActiveCell Offset(0, 11) Select & x27;11つ右へ行き
ActiveCell FormulaR1C1 = "hit"

If FoundCell2 Is Nothing Then Exit Do
Loop Until FoundCell2 Address = firstAddress

End Sub第13回。ワークブック全体で,任意のキーワードを検索したいのですが,ワークシートを
変えるところが上手くできません。もちろん,これらの測定器もで
コントロールし,取り込んだデータもマクロで処理する。人呼んで,マクロ他
にいくつかボタンも必要じゃから,ユーザーフォームを使うとしよう図」
リスト○変数の宣言セルに対してメソッドを実行する場合,そのセルの
親オブジェクトであるワークシートはアクティブでなければならない。

~以外の。絞り込むことが可能です。 また。いくつものアイテムを除外するには詳細設定
を利用することも考えられます。フィルターオプションの設定詳細設定は
リスト範囲と検索条件範囲を下図のように設定します。 ~以外の。~を除いた。
~Excelドロップダウンリストの選択肢が多すぎ。ただし。このドロップダウンリストに入っている選択肢があまりに多いと。入力
したい値を探すのにドロップダウンリストで「人事部」を選ぶと。「所属課
」欄のドロップダウンリストには人事部配下である「人事第一[EXCEL]キーワード検索リストの作り方COUNTIF。たくさんあるメニューの中から「牛」がつくものがいくつあるのか?牛*」の
ようにキーワードの前後にアスタリスク「*」を付けると。検索先文字列のどの
位置に「牛」があっても知ってるんだけど確認したい」時に便利なよう。
ほとんどが1分以内でナレーション無し-まわりに気兼ねなく何度
ファイルプレゼント すごい改革事例 業務に役立つ

検索結果をリストボックスに表示する:Excel。住所録のデータがあり。これから名前の一部または住所の一部が一致するデータ
を検索して。リストボックスに表示します作成したユーザーフォーム検索
したい氏名を入力する 。検索したい住所を入力する 。検索を
実行下図はあらかじめ検索するデータのあるファイルを開いてからを実行
しています。コンボボックスで都道府県名を検索キーワードにしたいとのこと
です。

Do While ActiveCellこの時点でActiveCellは1個です。このあとにActiveCellは変化しないので無限ループですね。それと仮に最初のうち正常に動いたとしても低速のFindメソッド+1個1個Selectするコードですから6万行の検索には耐えきれなくてハングアップ確実ですね。6万行の検索、ということで連想配列を使いましょう。Sub ループDim jogai As Object, i As LongSet jogai = CreateObjectScripting.DictionarySheets2.リスト.Selecti = 8Do While Cellsi, 2jogaiCellsi, 2.Value = jogaiCellsi, 2.Valuei = i + 1Loop 'リストを辞書に登録リストから除外をさがす jogaiEnd SubSub リストから除外をさがすjogaiDim i As LongSheets3.結果.SelectFor i = 20 To CellsRows.Count, 6.EndxlUp.RowIf jogai.existsCellsi, 6.Value ThenCellsi, 17 = hitEnd IfNextEnd Subキーワード検索のFindNextで無限ループにはまります。プログラムのロジック構造がまずそうですね。VBEのヘルプ、「Range.Find メソッド」の解説に一定の範囲を循環的に検索する例文があるので、それを参考にコーディングすれば上手く行きますね。とりあえず、ヘルプをほぼ丸写しした例を書いておきます。Sub ループDim rng As RangeApplication.ScreenUpdating = FalseFor Each rng In Worksheets2.リスト.RangeB8:B22 If rng.Value =Then Exit For Call リストから除外をさがすrng.Value Next rng Application.ScreenUpdating = TrueEnd SubSub リストから除外をさがすjogaiDim c As Range, firstAddress As StringWith Worksheets3.結果.RangeF20:F60000 Set c = .Findjogai, LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False If Not c Is Nothing Then firstAddress = c.Address Do c.Offset0, 11.Value = hit Set c = .FindNextc Loop While c.AddressfirstAddress End IfEnd WithEnd Subコードのエラーよりも、データが多すぎて処理が終わらないと思います。約60000行 × B列の値数 をループで回るとなるとメモリ不足になる可能性があります。なので、Dictionaryオブジェクトを使うことをお勧めします。下記コードをファイルのバックアップを取ってから試してみてください。Sub testDim myDic As ObjectDim StKey As StringDim Rng As Range, RngDt As VariantDim WS1 As Worksheet, WS2 As WorksheetDim i As Long, Lrow1 As Long, Lrow2 As LongSet myDic = CreateObjectScripting.DictionarySet WS1 = Sheets2.リストSet WS2 = Sheets3.結果With WS1Lrow1 = .CellsRows.Count, 2.EndxlUp.RowSet Rng = .Range.Cells8, 2, .CellsLrow1, 2RngDt = Rng.ValueFor i = 8 To Lrow1StKey = .Cellsi, 2.ValuemyDic.Add StKey, RngDti – 7, 1NextEnd WithWith WS2Lrow2 = .CellsRows.Count, 6.EndxlUp.RowFor i = 20 To Lrow2If myDic.exists.Cellsi, 6.Value Then.Cellsi, 6.Offset, 11.Value = hitEnd IfNextEnd WithEnd Sub

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です