日常業務を行うにあたって、過去の蓄積されたデータをエクセルの表やテーブルで管理し、必要に応じて都度検索することがあると思います。
その際には、エクセルの表やテーブルで管理しているデータを検索するときにエクセル機能の「検索」を利用していましたが、検索結果として検索条件と大量に一致した場合は一つずつの確認が非常にしにくいと感じました。
そんな場面で、検索結果を見やすく表示できる『表内のデータ簡単検索ツール』をExcelマクロで作成しました。
当記事にはマクロの元になるExcelファイルがダウンロード可能で、VBAのコードも記事内に記載がありますので、Excel VBAやマクロが良く分からないという方でもすぐに使用できます。
これを使用すれば業務効率化が図れるかと思いますので、是非ご活用頂けたらと思います。
わたしは、過去の質疑回答集を蓄積データとしてエクセルの表で管理して、当ツールを利用して検索結果をスムーズに表示できるようにしていました。
また、このツールのように複数項目に対して一つの検索条件でなく、各項目毎に検索条件を設定して検索したい場合は、以下のツールを使用してみてください。

(2022年5月13日:更新)
・検索実行時に検索対象の文字が存在しない場合は、検索対象がない旨のメッセージを表示させてフィルターしないように変更
・検索方法として「AND検索」「OR検索」を選択可能に変更
(2022年9月23日:更新)
・検索条件(AND検索、OR検索)の対象を「一つのセル」「複数項目」から選択可能に変更
・ツール全体のUIを変更
(2022年11月25日:更新)
・検索対象のデータが表でなくテーブルが使用されている場合でも動作するように改修
(2023年2月14日:更新)
・検索を一度もしていない状態で、フィルター解除アイコンをクリックするとデバッグモードになる現象を改修
『表内のデータ簡単検索ツール』の概要

エクセルの表を作成し、その中に日々業務で使用しているデータを入れ込んでいきます。
そのデータがある程度の数分だけ蓄積された状態で、そのデータ内から任意の文字を検索したい場合に、検索ワードを入れて検索処理を行えば対象行のみが表示され、該当セルが赤く表示されることで、検索が視覚的にも容易にできるようになります。
下に説明動画を載せますので、ご確認ください。
<説明動画>
基本的な機能、操作方法の説明
- 表内データ簡単検索ツールのVBAコードを含んだExcelファイル(***.xlms)を開きます。
- 対象の表内に検索対象とするデータを入れ込んだ状態にします。

- 「検索ワード」の欄に検索したい文字を入力ます。
- ”検索アイコン”(虫眼鏡アイコン)をクリックします。

検索ワードの内容での部分一致で検索結果が表示されます。

検索ワード欄の右にある “戻るアイコン” をクリックすれば、検索状態は解除され全データが表示されます。

留意事項
検索文字間にスペースを入れた場合は、検索条件と条件の対象を指定して検索
検索条件:「AND条件」、条件の対象:「一つのセル」
例えば、「問合せ 3」で検索ワードを入れた場合は、一つのセル内で”問合せ” という文字が入っていて、かつ “3” という文字が入っているセルを検索します。

検索結果として、両方を満たす値が入っているセルが検索され、表示されます。

検索条件:「OR条件」、条件の対象:「一つのセル」
同様に「問合せ 3」で検索ワードを入れた場合は、一つのセル内で”問合せ” と “3” のどちらかの文字が入っているセルを検索します。

検索条件:「AND条件」、条件の対象:「複数項目」


検索条件:「OR条件」、条件の対象:「複数項目」

検索対象の列について
標準では、表内のタイトル行の色が濃紺になっている箇所(D , E , F , G , H , I , J 列)が検索対象として設定されていますが、「setting」シートを変えれば、検索対象列を自由に変更することができます。

初期では非表示になっている「setting」シートのB3の値を対象列のカンマ区切りで値を設定すれば変更可能です。
表の項目の列数を変更する場合
現行のツールでは表の列が「J列」までで作成されていますが、項目数を増減する場合は、以下の対応をしてください。
<項目を減らす場合>

<項目を増やす場合>

使用する際の事前準備
このページの下部にある「Excelファイルのサンプル」からExcelファイルを取得し、「準備の手順」内にあるVBAコードを取得したExcelファイルに記載して保存すれば、すぐに当ツールを使用できます。
以下にその手順を説明していきます。
準備の手順
「サンプルのダウンロードはこちら」からサンプル(Excelファイル)をダウンロードします。
※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています。
<手順1>
ダウンロードしたExcelファイルを開いて、VBE(Visual Basic Editor)を起動させます。
- Excelファイル上部にあるリボンの「開発」タブを選択します。
- 「Visual Basic」をクリックして、VBE(Visual Basic Editor)を起動させます。

<手順2>
- 「Microsoft Excel Object」にて右クリックして「標準モジュール」を挿入します。

<手順3>
- 新しく作成された「Module1」を選択して、右側の空欄スペース(エディター)に下記のVBAコードをコピペで入力します。

VBAのソースコードはこちら
以下のVBAコードをコピーして、「Module1」内のエディターに貼り付けます。
※VBAコードの右上のアイコンをクリックするとソースコードをコピーできます。
Option Explicit
'---------(設定値)---------------------------
Private Const KEYWORD_POINT = "D4" '1.検索ワードを入力するセル位置
Private Const SEARCH_TYPE_POINT = "D3" '2.検索条件を指定するセル位置
Private Const TARGET_TYPE_POINT = "E3" '3.条件の対象を指定するセル位置
Private Const HEAD_ROW = 8 '4.テーブル見出し行の行番号
Private Const HEAD_COL_NUM = 1 '5.テーブル見出し列の列番号
Private Const SEARCH_TGT_POINT = "B3" '6.カンマ区切りで指定する検索対象の列を入力するセル位置
Private Const SETTING_SHEET_NM = "setting" '7.設定シートの名称
Private Const WORK_COL_NM = "作業列" '8.作業列の名称
'---------(メッセージ)-----------------------
Private Const Msg1 = "検索ワードを入力してください。"
Private Const Msg2 = "検索対象が見つかりませんでした。"
'----------------------------------------------
Dim SearchType As String '指定する「検索条件」
Dim TargetType As String '指定する「条件の対象」
Dim HeadCellPoint As String '見出し行のセル位置
Dim DataCellPoint As String 'データ行のセル位置
Dim WorkColNum As Long '作業列の列番号
Dim WorkCol As String '作業列
Dim BaseSht As Worksheet 'ツールの本体シート
Dim SettingSht As Worksheet '設定シート
'===============================================
'検索ボタンを押した時に実行される検索メイン処理
'===============================================
Sub 検索_Click()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
If Trim(Range(KEYWORD_POINT).Value) = "" Then
MsgBox Msg1
Exit Sub
End If
Set BaseSht = ActiveSheet
Dim lastRow As Long, iRow As Long, iCol As Long
Dim keyword As Variant, keywordArr As Variant
Dim tgtCol() As String
Dim tgtWord(0) As String
Dim searchResult() As String
Dim blnExist As Boolean: blnExist = True
Dim blnSearchExist As Boolean: blnSearchExist = False
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
BaseSht.Range(HeadCellPoint).AutoFilter
End If
''設定情報を取得する
Call GetSetting
''色の変更、作業行の初期化等を行う
Call ClearSheetColor
'検索ワードを取得し、間にスペースがあった場合は文字を分割して取得する
keyword = Trim(BaseSht.Range(KEYWORD_POINT).Value)
keyword = Replace(keyword, " ", " ")
keywordArr = Split(keyword)
'検索対象の列を格納する
tgtCol = Split(SettingSht.Range(SEARCH_TGT_POINT).Value, ",")
lastRow = BaseSht.UsedRange.Rows.Count + BaseSht.UsedRange.Row - 1
'検索対象の行がある分だけ繰り返す
For iRow = HEAD_ROW + 1 To lastRow
'条件の対象:「一つのセル」の場合
If InStr(TargetType, "一つのセル") = 1 Then
'検索対象の列がある分だけ繰り返す
For iCol = 0 To UBound(tgtCol)
tgtWord(0) = Range(tgtCol(iCol) & iRow).Value
For Each keyword In keywordArr
searchResult = Filter(tgtWord, keyword)
'AND検索の条件で検索する場合
If InStr(SearchType, "AND") <> 0 Then
If UBound(searchResult) = -1 Then
blnExist = False
Exit For
End If
'OR検索の条件で検索する場合
Else
blnExist = False
If UBound(searchResult) <> -1 Then
blnExist = True
Exit For
End If
End If
Next keyword
If blnExist Then
Range(WorkCol & iRow).Value = "1"
Range(tgtCol(iCol) & iRow).Font.Color = RGB(255, 0, 0)
blnSearchExist = True
End If
blnExist = True
Erase tgtWord, searchResult
Next iCol
'条件の対象:「複数項目」の場合
Else
Dim findCnt As Long: findCnt = 0
Dim processWord As String: processWord = ""
For Each keyword In keywordArr
'検索対象の列がある分だけ繰り返す
For iCol = 0 To UBound(tgtCol)
tgtWord(0) = Range(tgtCol(iCol) & iRow).Value
searchResult = Filter(tgtWord, keyword)
'検索ワードが表の対象セル内の値と一致する場合
If UBound(searchResult) <> -1 Then
Range(tgtCol(iCol) & iRow).Font.Color = RGB(255, 0, 0)
'一致した件数がスペースで区切ったワード数分と同数かをカウントする
If processWord <> keyword Then
findCnt = findCnt + 1
processWord = keyword
End If
End If
Next iCol
Next keyword
'AND検索の条件で検索する場合
If InStr(SearchType, "AND") <> 0 Then
If findCnt = UBound(keywordArr) - LBound(keywordArr) + 1 Then
Range(WorkCol & iRow).Value = "1"
blnSearchExist = True
Else
Rows(iRow).Font.ColorIndex = 1
End If
'OR検索の条件で検索する場合
Else
If findCnt > 0 Then
Range(WorkCol & iRow).Value = "1"
blnSearchExist = True
Else
Rows(iRow).Font.ColorIndex = 1
End If
End If
Erase tgtWord, searchResult
End If
Next iRow
'検索対象が存在する場合はフィルターし、存在しない場合はメッセージを表示させる
If blnSearchExist Then
BaseSht.Range(HeadCellPoint & ":" & WorkCol & Format(HEAD_ROW)).AutoFilter Field:=WorkColNum, Criteria1:="<>"
Else
MsgBox Msg2
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
'===================================================================
'フィルター解除ボタンを押した時に実行されるフィルター解除メイン処理
'===================================================================
Sub フィルター解除_Click()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Set BaseSht = ActiveSheet
HeadCellPoint = Split(Cells(1, HEAD_COL_NUM).Address, "$")(1) & HEAD_ROW
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
BaseSht.Range(HeadCellPoint).AutoFilter
End If
''設定情報を取得する
Call GetSetting
''色の変更、作業行の初期化等を行う
Call ClearSheetColor
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
'-------------------------------------
'色の変更、作業行の初期化等を行う
'-------------------------------------
Sub ClearSheetColor()
Dim iRow
Dim iCol
iRow = BaseSht.UsedRange.Rows.Count + BaseSht.UsedRange.Row - 1
iCol = BaseSht.UsedRange.Columns.Count + BaseSht.UsedRange.Column - 1
BaseSht.Range(Range(DataCellPoint), Cells(iRow, iCol)).Font.ColorIndex = 1
BaseSht.Range(WorkCol & HEAD_ROW + 1 & ":" & WorkCol & iRow).Clear
End Sub
'-------------------------------------
'設定情報を取得する
'-------------------------------------
Sub GetSetting()
Set SettingSht = Worksheets(SETTING_SHEET_NM)
Dim workColNm As String
Dim c As Range
Set c = Cells(HEAD_ROW, HEAD_COL_NUM).CurrentRegion
'最終列の列番号と列を取得する
WorkColNum = c.Columns(c.Columns.Count).EntireColumn.Column
workColNm = BaseSht.Cells(HEAD_ROW, WorkColNum).Value
HeadCellPoint = Split(Cells(1, HEAD_COL_NUM).Address, "$")(1) & HEAD_ROW
DataCellPoint = Split(Cells(1, HEAD_COL_NUM).Address, "$")(1) & HEAD_ROW + 1
'最終列の項目名が「作業列」でない場合は作業列を新たに作る
If WORK_COL_NM <> workColNm Then
WorkColNum = BaseSht.Cells.Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column + 1
BaseSht.Cells(HEAD_ROW, WorkColNum).Value = WORK_COL_NM
End If
'検索対象が表でなくテーブルで記載されている場合の対応
If BaseSht.ListObjects.Count <> 0 Then
If BaseSht.Range(HeadCellPoint).ListObject.Range.Columns.Count <> WorkColNum Then
'作業列がテーブル内に入っていない場合は、追加する
With BaseSht.Range(HeadCellPoint).ListObject
.Resize .Range.Resize(, .Range.Columns.Count + 1)
End With
End If
End If
WorkCol = Split(Cells(1, WorkColNum).Address, "$")(1)
'作業列が非表示になっていない場合は、非表示にする
If Columns(WorkColNum).Hidden <> True Then Columns(WorkColNum).Hidden = True
'検索条件を取得する
SearchType = SettingSht.Range(SEARCH_TYPE_POINT).Value
'条件の対象を取得する
TargetType = SettingSht.Range(TARGET_TYPE_POINT).Value
End Sub
<手順4>
マクロを含んだExcelとして、ファイルを保存します。
- 左上にある「保存」アイコンをクリックします。
- 「ファイルの種類」から「Excelマクロ有効ブック」を選択します。
- 「保存」をクリックします。


<手順5>
「検索アイコン」にメイン処理「検索_Click」のマクロを設定します。
【検索ボタン】
- 「検索アイコン」を右クリックします。
- 「マクロの登録」をクリックします。
- 「検索_Click」を選択します。
- 「OK」をクリックします。

<手順6>
「オートフィルター解除アイコン」にメイン処理「フィルター解除_Click」のマクロを設定します。
【オートフィルター解除ボタン】
- 「フィルター解除アイコン」を右クリックします。
- 「マクロの登録」をクリックします。
- 「フィルター解除_Click」を選択します。
- 「OK」をクリックします。

これで、それぞれのボタンを押せば、検索とフィルター解除が実施できるようになります。
これで事前準備は完了です。
あとは「当ツールの使用方法」で記載された方法でツールを実行できます。
なお、当マクロの開発環境は、OS:Windows10 、Excelのバージョン:Microsoft Office 365となっており、当環境では動作確認ができていますが、他の環境で正常に動作するかは確認できていません。
正常に動作しない場合は、コメントいただければ幸いです。
また以下にて、このような業務効率化できるツールを機能ごとの一覧でまとめてますので、ご興味のある方はご覧ください。
自力で業務効率化できるツール等を作成する場合は、「オンラインITスクール」を利用するとモチベーションを保ちつつ、効率的に学習とアウトプットができると思います。

自分に合わないと感じた場合は返金してもらえるため、ノーリスクで試すことができます。是非一度体験してみることをオススメします ^ ^
ツールのダウンロードはこちら
下記よりExcelファイルをダウンロードして、記事の途中にありました VBAのソースコードをツール内に組み込んで使用してください。
【Excel VBA】表内データ簡単検索ツール
※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています
他に要望等ありましたら、可能な限り改修等を対応しますのでコメント頂ければと思います。
異なる仕様のツールのダウンロードはこちら
仕様違いバージョンの変更点は以下になります。
- 検索した際に対象の文字のみが赤色で表示されます。
【Excel VBA】表内データ簡単検索ツール(type2)
※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています
以下のVBAコードをコピーして、「Module1」内のエディターに貼り付けます。
※VBAコードの右上のアイコンをクリックするとソースコードをコピーできます。
Option Explicit
'---------(設定値)---------------------------
Private Const KEYWORD_POINT = "D4" '1.検索ワードを入力するセル位置
Private Const SEARCH_TYPE_POINT = "D3" '2.検索条件を指定するセル位置
Private Const TARGET_TYPE_POINT = "E3" '3.条件の対象を指定するセル位置
Private Const HEAD_ROW = 8 '4.テーブル見出し行の行番号
Private Const HEAD_COL_NUM = 1 '5.テーブル見出し列の列番号
Private Const SEARCH_TGT_POINT = "B3" '6.カンマ区切りで指定する検索対象の列を入力するセル位置
Private Const SETTING_SHEET_NM = "setting" '7.設定シートの名称
Private Const WORK_COL_NM = "作業列" '8.作業列の名称
'---------(メッセージ)-----------------------
Private Const Msg1 = "検索ワードを入力してください。"
Private Const Msg2 = "検索対象が見つかりませんでした。"
'----------------------------------------------
Dim SearchType As String '指定する「検索条件」
Dim TargetType As String '指定する「条件の対象」
Dim HeadCellPoint As String '見出し行のセル位置
Dim DataCellPoint As String 'データ行のセル位置
Dim WorkColNum As Long '作業列の列番号
Dim WorkCol As String '作業列
Dim BaseSht As Worksheet 'ツールの本体シート
Dim SettingSht As Worksheet '設定シート
'===============================================
'検索ボタンを押した時に実行される検索メイン処理
'===============================================
Sub 検索_Click()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
If Trim(Range(KEYWORD_POINT).Value) = "" Then
MsgBox Msg1
Exit Sub
End If
Set BaseSht = ActiveSheet
Dim lastRow As Long, iRow As Long, iCol As Long
Dim keyword As Variant, keywordArr As Variant
Dim tgtCol() As String
Dim tgtWord(0) As String
Dim wordStart As Long
Dim blnExist As Boolean: blnExist = True
Dim blnSearchExist As Boolean: blnSearchExist = False
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
BaseSht.Range(HeadCellPoint).AutoFilter
End If
''設定情報を取得する
Call GetSetting
''色の変更、作業行の初期化等を行う
Call ClearSheetColor
'検索ワードを取得し、間にスペースがあった場合は文字を分割して取得する
keyword = Trim(BaseSht.Range(KEYWORD_POINT).Value)
keyword = Replace(keyword, " ", " ")
keywordArr = Split(keyword)
'検索対象の列を格納する
tgtCol = Split(SettingSht.Range(SEARCH_TGT_POINT).Value, ",")
lastRow = BaseSht.UsedRange.Rows.Count + BaseSht.UsedRange.Row - 1
'検索対象の行がある分だけ繰り返す
For iRow = HEAD_ROW + 1 To lastRow
'条件の対象:「一つのセル」の場合
If InStr(TargetType, "一つのセル") = 1 Then
'検索対象の列がある分だけ繰り返す
For iCol = 0 To UBound(tgtCol)
tgtWord(0) = Range(tgtCol(iCol) & iRow).Value
For Each keyword In keywordArr
wordStart = InStr(tgtWord(0), keyword)
'AND検索の条件で検索する場合
If InStr(SearchType, "AND") <> 0 Then
'見つかった場合は、色を変える
If wordStart <> 0 Then
'文字に色付け
With Range(tgtCol(iCol) & iRow)
.Characters(Start:=wordStart, Length:=Len(keyword)).Font.ColorIndex = 3
End With
Else
blnExist = False
End If
'OR検索の条件で検索する場合
Else
blnExist = False
If wordStart <> 0 Then
'文字に色付け
With Range(tgtCol(iCol) & iRow)
.Characters(Start:=wordStart, Length:=Len(keyword)).Font.ColorIndex = 3
End With
blnExist = True
End If
End If
Next keyword
If blnExist Then
Range(WorkCol & iRow).Value = "1"
blnSearchExist = True
Else
Range(tgtCol(iCol) & iRow).Font.ColorIndex = 1
End If
blnExist = True
Erase tgtWord
Next iCol
'条件の対象:「複数項目」の場合
Else
Dim findCnt As Long: findCnt = 0
Dim processWord As String: processWord = ""
For Each keyword In keywordArr
'検索対象の列がある分だけ繰り返す
For iCol = 0 To UBound(tgtCol)
tgtWord(0) = Range(tgtCol(iCol) & iRow).Value
wordStart = InStr(tgtWord(0), keyword)
'検索ワードが表の対象セル内の値と一致する場合
If wordStart <> 0 Then
'文字に色付け
With Range(tgtCol(iCol) & iRow)
.Characters(Start:=wordStart, Length:=Len(keyword)).Font.ColorIndex = 3
End With
'一致した件数がスペースで区切ったワード数分と同数かをカウントする
If processWord <> keyword Then
findCnt = findCnt + 1
processWord = keyword
End If
End If
Next iCol
Next keyword
'AND検索の条件で検索する場合
If InStr(SearchType, "AND") <> 0 Then
If findCnt = UBound(keywordArr) - LBound(keywordArr) + 1 Then
Range(WorkCol & iRow).Value = "1"
blnSearchExist = True
Else
Rows(iRow).Font.ColorIndex = 1
End If
'OR検索の条件で検索する場合
Else
If findCnt > 0 Then
Range(WorkCol & iRow).Value = "1"
blnSearchExist = True
Else
Rows(iRow).Font.ColorIndex = 1
End If
End If
Erase tgtWord
End If
Next iRow
'検索対象が存在する場合はフィルターし、存在しない場合はメッセージを表示させる
If blnSearchExist Then
BaseSht.Range(HeadCellPoint & ":" & WorkCol & Format(HEAD_ROW)).AutoFilter Field:=WorkColNum, Criteria1:="<>"
Else
MsgBox Msg2
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
'===================================================================
'フィルター解除ボタンを押した時に実行されるフィルター解除メイン処理
'===================================================================
Sub フィルター解除_Click()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Set BaseSht = ActiveSheet
HeadCellPoint = Split(Cells(1, HEAD_COL_NUM).Address, "$")(1) & HEAD_ROW
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
BaseSht.Range(HeadCellPoint).AutoFilter
End If
''設定情報を取得する
Call GetSetting
''色の変更、作業行の初期化等を行う
Call ClearSheetColor
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
'-------------------------------------
'色の変更、作業行の初期化等を行う
'-------------------------------------
Sub ClearSheetColor()
Dim iRow
Dim iCol
iRow = BaseSht.UsedRange.Rows.Count + BaseSht.UsedRange.Row - 1
iCol = BaseSht.UsedRange.Columns.Count + BaseSht.UsedRange.Column - 1
BaseSht.Range(Range(DataCellPoint), Cells(iRow, iCol)).Font.ColorIndex = 1
BaseSht.Range(WorkCol & HEAD_ROW + 1 & ":" & WorkCol & iRow).Clear
End Sub
'-------------------------------------
'設定情報を取得する
'-------------------------------------
Sub GetSetting()
Set SettingSht = Worksheets(SETTING_SHEET_NM)
Dim workColNm As String
Dim c As Range
Set c = Cells(HEAD_ROW, HEAD_COL_NUM).CurrentRegion
'最終列の列番号と列を取得する
WorkColNum = c.Columns(c.Columns.Count).EntireColumn.Column
workColNm = BaseSht.Cells(HEAD_ROW, WorkColNum).Value
HeadCellPoint = Split(Cells(1, HEAD_COL_NUM).Address, "$")(1) & HEAD_ROW
DataCellPoint = Split(Cells(1, HEAD_COL_NUM).Address, "$")(1) & HEAD_ROW + 1
'最終列の項目名が「作業列」でない場合は作業列を新たに作る
If WORK_COL_NM <> workColNm Then
WorkColNum = BaseSht.Cells.Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column + 1
BaseSht.Cells(HEAD_ROW, WorkColNum).Value = WORK_COL_NM
End If
'検索対象が表でなくテーブルで記載されている場合の対応
If BaseSht.ListObjects.Count <> 0 Then
If BaseSht.Range(HeadCellPoint).ListObject.Range.Columns.Count <> WorkColNum Then
'作業列がテーブル内に入っていない場合は、追加する
With BaseSht.Range(HeadCellPoint).ListObject
.Resize .Range.Resize(, .Range.Columns.Count + 1)
End With
End If
End If
WorkCol = Split(Cells(1, WorkColNum).Address, "$")(1)
'作業列が非表示になっていない場合は、非表示にする
If Columns(WorkColNum).Hidden <> True Then Columns(WorkColNum).Hidden = True
'検索条件を取得する
SearchType = SettingSht.Range(SEARCH_TYPE_POINT).Value
'条件の対象を取得する
TargetType = SettingSht.Range(TARGET_TYPE_POINT).Value
End Sub
<このツールが『結構使える!』と思ったら、下のグッドボタンを押していただけたら幸いです>
作業列をKではない列に変更することは可能でしょうか。
AQまでの列を使用したいと考えております。
管理人のRHです。
ご返答が遅れまして、申し訳ありません。
yさん、ツールのご使用とコメントありがとうございます。
「AQ列」まで使用するとのことですので、作業列をその次の列である「AR列」にすると考えて、以下を修正頂ければと思います。
・5行目を「Private Const WorkCol = “AR”」に変更
・8行目を「Private Const WorkColRow = “AR5:AR”」に変更
・89行目を「sht.Range(“A4:AR4″).AutoFilter Field:=44, Criteria1:=”<>“」に変更
上記で目的が実現できない場合は、再度ご連絡をお願いします。
ご返信いただきありがとうございます。
3点の修正をしたところ、問題なくマクロが実行できました。
とても有益な情報をありがとうございました。
仕事で活用させていただきます。
管理人のRHです。
問題なくマクロが実行でき、目的が達成されたようで良かったです。
また何かありましたらコメント願います。
こちらのマクロを使わせていただいているのですが、検索の際、「123AB/AA」とあった場合に検索で「123AA」と検索しても「123AB/AA」をヒットさせる方法はないでしょうか。コードなど教えて頂けると幸いです。
再コメントです。こちらのマクロを使わせていただいているのですが、検索の際、「123AB/AA」とあった場合に検索で「123AA」と検索しても「123AB/AA」をヒットさせる方法はないでしょうか。コードなど教えて頂けると幸いです。
管理人のRHです。
コメントいただきありがとうございます。
返信が遅くなり、申し訳ありません。
さ様が最終的に実現したいこととしては少し違っているかもしれませんが、
今のコードですと、「123AB/AA」を見つけたい場合に「123 AA」(※間に空白)を入れるとand条件で検索されて検索した結果として表示されますが、それで解決しますでしょうか。
>「123AB/AA」とあった場合に検索で「123AA」と検索しても「123AB/AA」をヒットさせる方法はないでしょうか。
質問なのですが、検索を行う際に検索ワードが無かった場合最下層にある空欄のセルが(データが入っていないところのセル)最上部に出てくるのですが、そのあと検索しても該当がないのかと思いオートフィルター解除のボタンや検索のボタンを押してもエクセルがフリーズしてしまいエクセルを再起動しないといけない状態になります。
検索のキーワードが該当ない場合、該当ありませんでリセットできるような状態にできませんでしょうか?
管理人のRHです。
コメントいただきありがとうございます。
検索を行った際に検索ワードが無かった場合、その後にオートフィルター解除のボタンや検索のボタンを押してもエクセルがフリーズしてしまうという現象は、当方の環境では確認できませんでした。
そのため、当ツールを検索対象がない場合に、「該当ありません」という旨のメッセージを表示してフィルターしないよう仕様変更しましたので、これでこ様の要望が実現できるかと思いますので、是非お試しください。
おはようございます。
早急の対応ありがとうございます。
フリーズが解消されました。
数万件のリスト検索をしているので処理が追い付かなかったのかもしれません。
本当にありがとうございます。
こんにちは。
使わせていただきたいと思い、ダウンロードさせていただきました。
教えてください。
2021年10月15日 10:53 AMの質問のように、R行を作業列としたく、返信の内容を行ってみましたが、上手くいきません。お手数おかけしますが、お教え願います。
どうぞよろしくお願いします。
管理人のRHです。
ynさん、ツールのご使用とコメントありがとうございます。
2021年10月15日 10:53 AM時の質問が当記事を更新する前のVBAコードに対しての回答になっておりましたので、同様に記載しても上手く動かなかったものと思われます。
本日改めてメンテナンス性が高くなるよう記事のVBAコード部分を更新しました。
ynさんが実現したい内容(R行を作業列とする)は、当記事(2022/4/20時点)のVBAコードにおいて以下の2か所を修正頂ければ動作すると思いますので、ご確認ください。
・9行目を「Private Const WorkCol = “R”」に変更
・10行目を「Private Const WorkcolNum = 18」に変更
上記で目的が実現できない場合は、再度ご連絡をお願いします。
ご返答いただき、ありがとうございます。
検索出来ました!
ありがとうございます。
あと、もう1点だけ、お教え願いますでしょうか。
検索範囲をD行・E行にしているのですが、それぞれ検索をかけるとちゃんと引っかかってきますが、例えば、
D行に会社名「㈱ABC」、E行に商品名「DEF」を入力
↓
検索に「ABC DEF」と検索 すると、「検索対象は見つかりませんでした」と出てきました。
and検索の意味を私がしっかり理解していないのかもしれませんが、両方引っかかるというより、それぞれの項目に引っかかると考えていいでしょうか?
よろしくお願いします。
管理人のRHです。
ynさん、無事使用できたようで良かったです。
追加のお問い合わせに関して、
ynさんが行った下記の動作はツールのルールであるAND条件としては、そのような動きになってしまいます。
>D行に会社名「㈱ABC」、E行に商品名「DEF」を入力
>↓
>検索に「ABC DEF」と検索 すると、「検索対象は見つかりませんでした」と出てきました。
AND検索というのが、「複数の条件をいずれも満たすもの」を検索結果として表示させるものになります。
※今回の場合ですと、一つのセルに「ABC」と「DEF」を含むセルを検索結果に出させる挙動
ynさんがおっしゃる挙動で動かす場合は、OR検索というものになり「複数の条件のうち少なくともいずれか一つを満たすもの」を検索結果として表示させることになります。
もし、そのような動作(OR検索)が必要でしたら、必要に応じてカスタマイズできるようにツールを変更しますので、その旨追加でコメント頂ければと思います。
ご返答いただき、ありがとうございます。
OR検索というものがあるのですね、AND検索と混同しておりました、お教えいただきありがとうござます。
希望としては、OR検索がしたいです。
現在、2つのデーター用に活用させていただいています。
1)B、D、E行
2)B、D、E、F、G、M行
各上記行が、検索に引っかかるように設定しています。
ややこしくて済みませんが、お教えいただけますでしょうか?
よろしくお願いします。
管理人のRHです。
ynさん、コメントありがとうございます。
(返信できる件数の上限を超えましたので、新規でコメントします。)
ご希望された「OR検索」ができるように改修しましたが、要望に応えられるものになっていますでしょうか。
なお、1)B、D、E行 2)B、D、E、F、G、M行を検索対象にする場合は、以下のとおり修正していただければ動作するかと思います。
・VBAコードの11行目を Private Const SearchTgtCol = “B,D,E,F,G,M” に変更する。
・Excelファイルを再度ダウンロードしていただき、「J3」セルを「OR検索」に変更する。
(ダウンロードできるExcelファイルを新しいバージョンに変更しました)
一度ご確認をお願いします。
何度もご返答いただき、ありがとうございます。
とても分かりやすくタブをつけていただいて、誰でも使いやすいようになっており、とても助かります。
もう1点だけ、確認させてください。何度も済みません。
複数条件に合致したものだけを抽出、としたいのですが、それはまたOR検索でもAND検索でもなく、別検索になりますでしょうか。
例えば、B,D,F行が検索対象行とすると、Bに会社名、Dに商品名、Fに単価を入れています。検索ボックス「アマゾン 〇〇商品」と入力すると、「アマゾン 〇△商品」「楽天市場 〇〇商品」も含まれて検索結果に出てきます。
「アマゾン」で買った「〇〇商品」の単価はいくらだったか?が出てきてほしい場合は、また違った検索になりますでしょうか。
私の質問の仕方がイマイチなため、何度も質問重ねて申し訳ございません。
よろしくお願いします。
管理人のRHです。
ynさん、ご確認ありがとうございます。
なるほど、そういうことですか、理解できず失礼しました。
イメージとしては、項目をまたいだAND検索を行いたいという意味だと理解しました。
おそらく、B列とD列の値が一つのセルに入ってる状態なら、AND条件で検索をすればynさんの行いたいことを実現できるのかなと思います。
現状としては当ツールは「一つのセルに対して検索」をする機能しかないので、ynさんが行いたい仕様になっていません。
可能なら、その機能を実現したツールを作りますので、少しお待ちいただけますでしょうか。
管理人のRHです。
ynさんへ、項目をまたいだAND検索ができるツールを用意できましたので、以下のページからツールをご確認ください。
https://resthill.blog/excel-vba-tool9/
必要に応じて、表内の列等が多くなった場合などは、VBAコード内の(設定値)を変えることで対応できるかと思います。
不明点等ありましたら、改めてコメントをください。
早々にご返答いただき、ありがとうございます。
私こそ、上手く質問出来ておらず、大変失礼しました。
ツール確認いたしました。とても分かりやすく、希望通りです!
何度もお付き合いいただき、ありがとうございました。
管理人さんのサイトで、マクロの凄さを知りました。
マクロって、メンドクサソウ・何書いてるか分からないし、関数は分かるからそれで何とかしよう・・としていました。つまづいた結果、検索して、こちらのサイトに辿り着きました。
他サイトと比べて、大変見やすい・分かりやすい・ど素人でも試しやすかったです。マクロを知って楽しかったので、サイトでも勉強させていただきます。
ど素人の私に対して親身になって、迅速にお答えいただきありがとうございました!
管理人のRHです。
ynさん、ご返答ありがとうございます。
(返信できる件数の上限を超えましたので、新規でコメントします。)
ご希望通りのものを作ることができてよかったです。そしてお褒め頂き大変ありがとうございます。
VBAマクロは細かな業務効率化をするために非常に有効な方法だと思うので、是非、当サイトも含めて色々なもので学んでいただき、日々の業務にご活用いただけたらと思います。
管理人さま
使い勝手がよく、作業が効率化できました。ありがとうございます。
下記内容についてご教示頂きたく、コメントいたします。
検索を実行すると、検索ワードに該当しない行は格納されると思いますが、
35行目以降(初期状態は34行目まで罫線あり)にデータ入力し使用したところ、検索後に該当しない行が格納しません。(34行目までは格納される)
35行目以降も格納できるようにしたいのですが、何か対応策はございますでしょうか?
以上
管理人のRHです。
TFさん、ツールのご使用とコメントありがとうございます。
35行目以降にデータ入力した場合は、それらも検索対象と認識して、検索とフィルター解除の対象となるはずでしたが、されないようですね。
では試しにですが、34行目の行全体をコピーして、35行目以降に貼り付けて、貼り付けた行に値を入力した状態で、「検索」をするとどうなるでしょうか。
また、増やした行(例えば35行から40行まで増やす)の35行目のセルに値が一つも入っていない状態で、36行目のセルに値が入っていても検索対象が35行までになります。そのため途中の行で空行が存在しないようにする必要があるのですが、これも問題ないでしょうか。
管理人さま
迅速な対応ありがとうございます。
本件の事象について、34行目の行全体をコピペしてみたところ、問題なく動作いたしました。
また、後述された空行の件についても問題なく動作することを確認いたしました。
ありがとうございました。これからも当マクロを使わせていただきます。
以上
管理人のRHです。
TFさん、コメントありがとうございます。
問題なく動作したとのことで、安心しました。
またお使い頂いて、何かありましたらコメント願います。
管理人さま
とても便利なツールをありがとうございます。
1つ質問なのですが、AND検索を1つのセルに対してではなく1つの行に対して行うようにすることは可能でしょうか。
もし可能でしたら、その方法を教えていただけると助かります。
よろしくお願い致します。
管理人のRHです。
hakoさん、コメントありがとうございます。
申し訳ありませんが、このツールでは行単位でのAND検索には対応していません。
>1つ質問なのですが、AND検索を1つのセルに対してではなく1つの行に対して行うようにすることは可能でしょうか。
しかし、別のツール『テーブル内の各項目データ検索ツール』(https://resthill.blog/excel-vba-tool9/)
でしたら、行単位でのAND検索が可能かと思うのですが、おっしゃることは実現できそうでしょうか。
お手数ですが、一度当ツールのご確認をお願いいたします。実現したいイメージと異なる場合は改めてコメント頂ければと思います。
管理人さま
早速お返事をいただきありがとうございます。
私がイメージしているものは、例えば項目にKeyword1~Keyword5まであり、その中に検索ワードの〇〇と△△が存在する行を探したいみたいな感じです。
返信いただきました『テーブル内の各項目データ検索ツール』のやり方ですと、項目ごとに検索ワードを入れる形になるので、ちょっと違うのかなぁと。
そのため、こちらのツールを参考にさせていただきました。
1つの検索ボックスにいくつかワードを入れて、一致する行を探したいというのが希望です。
もしそのようなことが可能でしたらご教授いただけると助かります。
管理人のRHです。
hakoさん、コメントありがとうございます。
申し訳ありません、勘違いしておりました。なるほど、そういうことですね。
項目を指定せずセル内でなく、行内でAND検索をしたいということで理解しました。
では、暫定的な対応ですが、既存のVBAコードの78行目~117行目を削除していただき、代わりに以下のコードを記載願います。(※コメント欄の縮小のため、コードの空行をなくしています)
===============================
Dim findCnt As Long
For Each keyword In keywordArr
‘検索対象の列がある分だけ繰り返す
For iCol = 0 To UBound(tgtCol)
tgtWord(0) = Range(tgtCol(iCol) & iRow).Value
searchResult = Filter(tgtWord, keyword)
If UBound(searchResult) <> -1 Then
findCnt = findCnt + 1
Range(tgtCol(iCol) & iRow).Font.Color = RGB(255, 0, 0)
Exit For
End If
Next iCol
Next keyword
‘AND検索の条件で検索する場合
If InStr(SearchType, “AND”) <> 0 Then
If findCnt = UBound(keywordArr) – LBound(keywordArr) + 1 Then
Range(WorkCol & iRow).Value = “1”
blnSearchExist = True
Else
Rows(iRow).Font.ColorIndex = 1
End If
‘OR検索の条件で検索する場合
Else
If findCnt > 0 Then
Range(WorkCol & iRow).Value = “1”
blnSearchExist = True
Else
Rows(iRow).Font.ColorIndex = 1
End If
End If
findCnt = 0
Erase tgtWord, searchResult
=================================
これで動作するかと思いますので、一度お試しいただき、イメージと異なる場合はお手数かけますが再度コメントを頂きたくお願いいたします。
管理人RHさま
ありがとうございます。
私のイメージ通りです!ちゃんと動作しました!!!
本当にありがとうございました。
管理人のRHです。
hakoさん、コメントありがとうございます。
イメージ通りのツールを作ることができて良かったです。
また、ご要望等がありましたらコメントをお待ちしております。
管理人さま
VBAは初心者です。
検索ツールを作りたくていろいろ検索し、これだ!と思うものに出会えて感激し、DLさせていただきました。ありがとうございます。
1点質問がありまして、
表のデータが増えていくのが必然なのですが、データを入れていくのは現在いわゆる表(勘違いでしたらすみません)の様ですが、こちらはデータ行が増えても取り扱いやすいテーブルにすることは可能なのでしょうか。
もしテーブルで稼働できるのであればお教えいただけると助かります。
よろしくお願いいたします。
管理人のRHです。
CKさん、ツールの使用とコメントいただき、ありがとうございます。
当マクロツールはDLできるファイルは初期状態では表形式になっていますが、表部分をテーブルに変更しても稼働するかと思います。
実際にテーブルに変更して動かしてみて、思ったような動作がしない場合は改めてコメントいただければと思います。
もし動作しない等ありましたらご希望の状態に改修する方法をお伝えいたします。
管理人RHさま。
早速ご回答いただきありがとうございます。
実際にテーブル変更して動かしてみたのですが、エラーが表示されてしまいました。
テーブルは、表の8行目を見出し行として変換しました。
エラーは178行目がマーキングされていて
「RangeクラスのAutoFilterメソッドが失敗しました」
と表示されます。
すみません、できればテーブルにして使用したいのですが
もし大きくコードを構築しなければならないようでしたら申し訳ないので
以前のコメントにあった行全体をコピペして増やすことに致します。
ご足労でないようでしたら、改修方法をご教示いただければと存じます。
管理人のRHです。
CKさん、コメントありがとうございます。
動作しない旨、承知しました。
本日(2022/11/25)テーブルが使用されている場合でも動作するようソースコードを改修しましたので、改めてソースコードをコピペしてご利用いただければ幸いです。
#改修箇所:ソースコード259行~268行目
原因を調査したところ、作業列にあたる列がテーブルに含まれなかったことが理由だと判明しましたので、テーブルが使われていた場合は作業列をテーブル内に含むよう処理を追加しました。
管理人のRHさま
CKです。早速ご対応いただきありがとうございます。
正にコレ!というイメージ通り、とてつもなく重宝するツールを公開していただき感謝です。
いろいろな場面で使わせていただきます。
お手数をお掛け致しました。ありがとうございました!!!!!
いつも参考にさせていただいております。
バーコードでの備品管理をしています。
A列のセルにバーコードでNoを入力し右のセルにVLOOKで在庫場所や入庫、出庫状況を表示させ、いつ、誰が度のタイミングで出しているのかなどを表示させてています。
一点ご相談なのですが、
いろいろとデータを入れていくとき、
A列のセルにバーコードで数字を入力したときに、その入力した数字で同時に検索をかけ、これまでの経過を表示させていくことは可能でしょうか。
というのも、どのような払い出し経過をしているのかみたいと言われました・・・汗
管理人RHです。
はりーさん、コメントありがとうございます。返答が大変遅くなり申し訳ありません。
A列のセルに数字等の値を入力したときに、同時に検索をかけることは実現可能です
現状のツールに当てはめると、A列の新規行に値を入力すると、検索ワード欄に入力した値が同時に入力されて検索まで実施されるイメージで考えていますが、合ってますでしょうか?
いつも参考にさせていただいております。
今回のマクロツールですと、検索ワードを入力後に検索ボタンをクリックする必要がありますが、その手間を省く方法はありませんでしょうか?(検索ワード入力欄に入力すればフィルターがかかるといった形)
ご教授くださいますと幸いです。
管理人RHです。
KOさん、ツールのご使用とコメントありがとうございます。
検索ワードに値を入力してカーソルを外す(Enterやtab等を押す)だけで検索がかかるようにする方法を以下にご説明します。
1.ツールのVBAのソースコード(このページ内にあるVBAコード)をコピーして、VBEの「Sheet2(テーブル内データ検索)」をダブルクリックして、表示された右側の欄にそのまま貼り付けします。
※元々「Module1」に記載されていた内容を「Sheet2」に張り直します。
2.「Module1」に記載されていたコードは削除します。
3.「Sheet2」に貼り付けたコードの最後に以下をコピペします。
===============================
Private Sub Worksheet_Change(ByVal Target As Range)
If Replace(Target.Address, “$”, “”) = KEYWORD_POINT Then
Call 検索_Click
End If
End Sub
===============================
これらをすれば検索ボタンを押さずして検索が実行されるかと思います。
また、検索アイコンと解除アイコンを使用する場合には、改めてそれらのボタンにマクロの登録を行う必要がありますのでご注意ください。
行ってみて思ったような動作がしない場合は改めてコメント頂ければ幸いです。
管理人様
お世話になります。
こちらのツールのお陰で既存のExcelの表を検索するのが容易になり、大変助かり、感謝しきれません。
ひとつ質問なのですが、セルないに半角カナで入力されている場合は全角カナを検索窓に入力しても検索できません。
どうやら大文字は大文字で、全角は全角でとセル内と全く同じ書式でないと検索できない様なのですが、出来る方法はございますでしょうか。
ご返答のほど、よろしくお願いいたします。
管理人RHです。
kuraさん、ツールのご使用とコメントありがとうございます。
大文字と小文字や、全角と半角を区別せずに検索する場合は、以下のご対応をお願いします。
・88行目と133行目の2行分を以下のように変更してください。
searchResult = Filter(tgtWord, keyword)
↓
searchResult = Filter(tgtWord, keyword, True, vbTextCompare)
ソースコード修正後に実行し、思ったような動作がしない場合は改めてコメントいただければと思います。
管理人様
早速のご返答、誠にありがとうございます。
コード修正後、検索できるようになりました。
またわからないことがあれば、質問させていただくかもしれませんが、その際はよろしくお願いいたします。
誠にありがとうございます。
管理人RHです。
kuraさん、ご希望通り検索できたようで良かったです。
また何かありましたら遠慮なくコメント等頂ければ返信いたします。
1つ質問させて頂きたいです。
247行目で「オブジェクト変数またはWithブロック変数が設定されていません」というエラーが出てしまいます。
どのように対処したらよいかご教授願います。
管理人RHです。
うめさん、ツールのご使用とコメントありがとうございます。
247行目の「workColNm = BaseSht.Cells(HEAD_ROW, WorkColNum).Value」でエラーになっているかと思います。
管理人の環境では、当該エラーは発生しないため再現させることができません。
エラーになった状況(表に入っている特異なデータ、どの操作をした場合にエラーが出るか)をもう少し詳しく教えていただけるとエラー発生原因が分かるのですが、説明頂くことは可能でしょうか。
例)検索する値に日付を入れて検索ボタンをクリックしたときに発生する。等
または、デバッグ(エラーが発生した箇所とそのあたりで使用されている変数の値を調べる等)していただければ原因発生の理由に近づくのですが、いかがでしょうか。
それかもし可能でしたら、「お問い合わせフォーム」よりご連絡いただければ個別に原因追及等の対応をいたしますので、ご検討ください。
こちらからコメントしたのにも関わらず、日数が経ってしまい申し訳ありません。
RH様が用意してくださったサンプルをダウンロードして、そこにソースコードを追加し、ユーザーフォームの実行を押すとエラーになってしまいます。
検索する値などはいれていないです。
Excel2016で行っています。
お問い合わせフォームの場所が分からず、コメントでの返信となってしまいました。申し訳ありません。
管理人RHです。
うめさん、ご返答ありがとうございます。
実施頂いた内容で少し気になったのが、マクロを実行する際に「ユーザーフォームの実行を押した」というところです。
このツールを実行させるには、本来は検索ワード欄の右にある(虫眼鏡マーク)をクリックするか、またはその右にあるグレイのアイコンをクリックします。
試しに実施していただきたいのですが、上部リボンの「開発」タブ→「マクロ」→「検索_Click」を選択して「実行」を押していただくと、エラーは起こりますでしょうか。
マクロの知識がなければやったこともないまま、簡単に入れられたこちらのデータを利用させていただいております。
かなり初歩的な質問なのですが、データをマクロ有効ブックで保存し閉じ、再び開いたときにマクロが無効化されていますという表記が上に出てきたので、有効にするというところをクリックした後に検索かけると
実行エラー”1004″ ‘Rangeメソッドは失敗しました’ ’_Global’オブジェクト
という表記が出てデバッグをクリックすると
Range(Head Cell Point).AutoFillter
という部分が黄色くマーカーされている状態です。(検索はかけられないまま)
マクロ知識以前の問題かもしれませんが、常に開いただけで検索がかけられる状態にすることはできますでしょうか。このような表記が出てしまう原因と改善方法を教えていただけますと幸いです。
わかりにくい文章で申し訳ございません。よろしくお願いいたします。
管理人RHです。
chikaさん、ツールのご使用とコメントありがとうございます。
いえいえ、Excelマクロなどを知らずに使えることをモットーにしていたのに簡単に使えず申し訳ないです。
おっしゃっていただいた内容は、当方の環境では再現できないですが、現象は承知しました。
試しにですが、VBAソース上の
56行目と205行目の「Range(HeadCellPoint).AutoFilter」の2か所を「BaseSht.Range(HeadCellPoint).AutoFilter」に変更して動作させてみるといかがでしょうか。
ソースコード修正後に実行し、思ったような動作がしない場合は改めてコメントいただければと思います。
管理人様
早急かつご丁寧な返信ありがとうございます。
いただいた内容で修正かけましたところ、正常に作動するようになりました。大変助かりました。
今後使用していてまた何か不具合置きましたらご連絡するかもしれませんが、その際はよろしくお願いいたします。
この度は大変ありがとうございました。
管理人RHです。
chikaさん、ご返答いただきありがとうございます。
コメントいただいたおかげで、不具合を見つけることができ感謝しています。
また何かありましたら気軽にコメントください。
管理人様
このような便利なツールを公開していただいて大変感謝しております!
こちらをベースに使わせていただこうと準備をしております。
ところで質問ですが、
検索ボタンを押さずに「フィルター解除アイコン」をクリックすると、デバッグモードになってしまうようです。
これを回避するにはどうしたらよいでしょうか?
本来、検索ボタンを押していない状態で フィルター解除ボタンを押す必要はないのですが、
押す人がいた場合に備えたいのと、
ファイルを開いたときに常に検索結果がリセットされた状態にするために、リセットをするようなイベントプロシージャを設定したい、
という理由で質問させていただきました。
よろしくお願いいたします。
管理人RHです。
KKさん、ツールのご使用とコメントありがとうございます。
ご指摘頂きありがとうございます。おっしゃる通り検索を一度もしていない状態でフィルター解除アイコンをクリックすると、エラー状態になっていました。
本日、修正したVBAソースをアップロードし直しましたので、再度コピーして使用いただければデバッグモードになる現象は解消されているかと思います。
もう一点、
「>ファイルを開いたときに常に検索結果がリセットされた状態にするために、リセットをするようなイベントプロシージャを設定したい、」というご希望に関しては、
VBEのプロジェクト内の「Thisworkbook」に対して、以下のVBAソースを追記頂ければ可能かと思います。
‘ここから================================
Option Explicit
Private Sub Workbook_Open()
Call フィルター解除_Click ”フィルター解除を起動
End Sub
‘ここまで================================
VBAソースコードを追加頂き、思ったような動作がしない場合は改めてコメントいただければと思います。
管理人RH様
早速ご対応くださいましてありがとうございます!
また、ご親切にイベントプロシージャのコードも書いてくださりありがとうございました。
最新のコードをコピーして使わせていただきます。
大変助かりました。感謝申しあげます。
VBA初心者です。
手順6の検索アイコンから分かりませんでした。
会社のPCからExcelダウンロードすると何もないExcelがダウンロードされ、携帯からダウンロードするとアイコン表示されてます。
初心者用に手順6からのアイコン?(正式名称分かりません)セルの1から6に表示されているアイコンの作り方教えてくださいm(_ _)m
管理人RHです。
VBA初心者さん、ツールのダウンロードとコメントありがとうございます。
ダウンロードしたExcelファイル内に検索アイコンが表示されていないように見受けられます。
セル1~6にあるオブジェクトなどに関しては、少しややこしいですが、以下のようになっています。
●D4セル:検索文字が入るセル
●検索アイコン:楕円形の図形(虫眼鏡アイコン付き)
●検索解除アイコン:楕円形の図形(更新アイコン付き)
●検索条件:スライサー(非表示のsettingシートに対応する表が記載)
●条件の対象:スライサー(非表示のsettingシートに対応する表が記載)
少し難しいですが、上記と同等の状態をExcelで作り出せればツールを使用できると思います。
しかし、そもそも使用されているPCでアイコンが表示されないことがおかしな現象であるため、もう少し現象を詳しくお聞きしたいのですが、ダウンロードしたExcelの1~6行目は図形等の表示自体が全くない状態でしょうか?
返信ありがとうございます。
会社のExcel2013バージョンでセルに何も表記されていませんでした。
他のタブレットやPCでも同じ現象なので会社のセキュリティが原因かもしれません。
PDF入っていないのですがこちらが原因かもしれません。
教えて頂いた虫眼鏡アイコン等自分なりに調べて見たのですが知識が足りなく全く分かりません。
フォームのコントロールの中から選択するのでしょうか?
Excelの図形なら虫眼鏡を作りマクロで登録するのでしょうか?
質問ばかりで申し訳ありませんm(_ _)m
管理人RHです。
VBA初心者さん、コメントありがとうございます。
会社のセキュリティ等の理由で図形等が表示されないのは初めて知りました。
まず大まかに説明すると、楕円形の図形と虫眼鏡アイコンを二つ作り、二つを重ね合わせて検索アイコンとして作成しています。
以下に「検索アイコン」の作り方を細かくお伝えします。
<楕円形の図形>
❶上部リボンタブの「挿入」→「図形」→「楕円」より
楕円系の図形をセル内に適当なサイズで図形を作ります。
<アイコン>
❶上部リボンタブの「挿入」→「アイコン」でストック画像の画面を表示させます。
❷上部のタブをアイコンにして、検索ボックスに「検索」と入力して、Enterを押します。
❸表示されたアイコンの中から虫眼鏡アイコンをクリックして、挿入ボタンをクリックします。
二つの図形をサイズを合わせて重ね合わせて検索アイコンとしています。フィルター解除アイコンも同様の方法で作成しています。
検索文字の間に空白を利用する場合は、「検索条件」と「条件の対象」を使えるのですが、スライサーに関しては、少し作り方の説明が複雑になってしまいます。
上記の説明でいかがでしょうか、難しい場合は、改めてコメント等いただけますと幸いです。
管理人様早期対応ありがとうございます。
PDFやパワポも入っておりシステム担当の知識ある方に何故Excelに表示されていないのか調べて頂いて貰ってます。
本日出張でPC手元にないので明日教えて頂いたやり方でチャレンジしたいと思います。
丁寧かつ迅速な対応感謝致しますm(_ _)m
アイコン表示がなくExcel2013が原因かもしれません。
残念ですが今回は諦めます。色々ありがとうございましたm(_ _)m
管理人RHです。
PDF初心者さん、コメントありがとうございます。
Excelのバージョンで挿入→アイコンの表示がないとのことなので、アイコンは使用せずに図形内に「検索」の文字のみを入力する等でご対応は可能でしょうか。
(挿入→図形)自体ができない(クリックできない等)という現象が起きていたらそれも難しいと思いますが。
初めまして。会社に過去データの検索機能がなく
さかのぼって調べるのが大変なためこのツールを見つけて感動しました。
別シートに作成した表データを
検索シート内のセル(C列)にVLOOKUPで検索し
反映させるように関数を入れたところ
赤文字にはなるのですがシートが
折りたたまれなくなってしまいました
関数を消して検索したところ元通りになったので
列に関数を入れたことが問題だとは思うのですが、
VLLOKUPを使用した列も含み折りたたまれるようにするようにする方法があればご教示お願い致します。
上手く説明できず申し訳ございませんが
よろしくお願いします。
管理人RHです。
yumiさん、コメントありがとうございます。
検索シート内のセル(C列)にVLOOKUP関数を入れたところ、折りたたまれなくなるのは想定外でした。
しかし、こちらの環境で同様の状態(C9とD9の2か所にVLOOK関数を入れて、他シートの値を取得する状態)を作り実行してみましたが、対象外の行が折りたたまれないという現象は起きませんでした。
そこで試しにご確認いただきたいのですが、検索した後で折りたたまれなかった際は、Excelファイル内の作業列にあたる列(デフォルトではK列で、非表示になっています)の値はどうなっていますでしょうか。
赤色表示の値がある行のみ1が入力されていて、他行には何も入力されていない状態が正しいのですが、いかがでしょうか。
恐れ入りますが、ご確認をお願いします。
管理人様ご回答ありがとうございます。
再表示にしたところK列は何も表示されていませんでした
最初 エラー№ 13、型が一致しませんと表示されましたが
何度か試してみたところ、折りたたまれるようになりました
当初の私の動作に問題があったのかもしれません。
お時間を頂戴して申し訳ございませんでした。
ご対応いただきありがとうございました
管理人RHです。
yumiさん、コメントありがとうございます。
検索後に赤色表示がある行にはK列に「1」が表示されるはずなのですが、表示されないことがおかしな動作になっています。
何度か試した際に折りたたまれるようになって、ひとまず正常な動作するようになったということで、いったんは問題なしということですね。
他の方も同様の現象が起きている方もいらっしゃいますので、潜在的な不具合が存在するかもしれません、また起きることがありましたら、コメントまたは問合せフォームより連絡ください。
管理人様
便利なツールをいつもありがとうございます。
今回のツールも早速使用させて頂いたのですが、なぜか検索してもシートが折りたたまれず、対象部分が赤くなるのみになってしまいます。
何か考えられる原因はございますでしょうか?
管理人RHです。
素人Xさん、コメントありがとうございます。
他の方からも同様のコメントがありましたが、こちらの環境では確認することはできませんでした。
そこで試しにご確認いただきたいのですが、検索した後で折りたたまれなかった際は、Excelファイル内の作業列にあたる列(デフォルトではK列で、非表示になっています)の値はどうなっていますでしょうか。
赤色表示の値がある行のみ1が入力されていて、他行には何も入力されていない状態が正しいのですが、いかがでしょうか。
恐れ入りますが、ご確認をお願いします。
管理人様
ご返信いただきありがとうございます。
先ほどK列を確認したところ、何も表示がされていない状態でした。
この場合、どのように対応すればよろしいでしょうか。
管理人RHです。
素人Xさん、コメントありがとうございます。
検索後に赤色表示がある行にはK列に「1」が表示されるはずなのですが、表示されない部分は予想外の動作になっています。
もし可能でしたら、現象が起きた際の以下の情報を教えていただけますでしょうか。
原因解明につながるかもしれません。
●検索ワードに入力した値の構成 (一単語か、複数の単語をスペースで区切って入力したか)
●検索時の検索条件 (AND検索かOR検索か)
●条件の対象 (一つのセルか複数項目か)
また可能でしたら、問合せフォームからご連絡いただければ、対象のファイルを確認したうえで個別に問題解消の対応をいたしますので、ご検討ください。
管理人様
お返事ありがとうございます。
検索ワードは1単語のみを入れ、検索条件・検索対象はそれぞれ変更して数通り実験をしてみましたところ、すべて同じ症状でした。
本日初めて使わせていただいた初心者です。
自身のPCでは使えるのですが、ファイル共有サーバーから別のPCで使用するとマイクロソフトからマクロのブロックされてしまいます。office365使用しております。対処法はありますでしょうか?よろしくお願いします。
管理人RHです。
ちるさん、コメントありがとうございます。
マクロがブロックされてしまうとのことですが、一度以下の記事を基にブロックを解除していただいても良いでしょうか。
https://resthill.blog/macro-tips1/
記事に記載の方法でも、まだブロックされてしまう場合は改めてコメントをお願いします。
管理人RHです。
素人Xさん、ご確認とコメントありがとうございます。
※返信できる数を超えてしまったので新しくコメントします。
検索ワードは1単語のみを入れ、検索条件・検索対象はそれぞれ変更しても全て同じ症状なのですね。
デバッグすると111行目、155行目、164行目の行を通過していない(このどれかの行を通過しないとK列に1が入らない)状態なのが問題だと思われます。
例えば、VBEの111行目にブレークポイントを置いた状態で、条件の対象を「一つのセル」にして(検索条件はどちらでも良いです。)検索をした際に、111行目で処理が止まるかご確認いただけますでしょうか。
ブレークポイントの置き方については、https://resthill.blog/vba-debug/#rtoc-5をご参照ください。
管理人様
このような便利なツールを公開していただきありがとうございます。大変感謝しております。
検索ワードを含むセルが赤くなるのですが、検索ワードのみを赤く変更することは可能でしょうか?
もし可能であれば、コードをご教授いただきたいです。
よろしくお願いいたします
管理人RHです。
OOさん、ツールの使用とコメントありがとうございます。
検索ワードのみを赤くすることは可能ですので、改めてコードを公開いたしますので、お待ちください。
ありがとうございます!
お待ちしております。
管理人RHです。
OOさん、お待たせいたしました。
検索ワードのみを赤くする仕様のツールを作成しましたので、ご確認ください。
この記事の最後に追加しました。(以下URLをクリックください。)
https://resthill.blog/excel-vba-tool2/#rtoc-10
ありがとうございます!!
大変感謝しております。
すみません、また質問になるのですが、
大文字と小文字や、全角と半角を区別せずに検索する場合はどのように変更すればよろしいでしょうか?
他コメントで返信いただいている通りにやろうとしましたが、うまくいかず…
管理人RHです。
OOさん、ご確認とコメントありがとうございます。
大文字と小文字、全角と半角を区別せず検索する場合は、異なる仕様のツールにあるソースコードを以下のように修正してみてください。
88行目、149行目の二か所を以下に変更願います。
(修正前)wordStart = InStr(tgtWord(0), keyword)
↓
(修正後)wordStart = InStr(1, tgtWord(0), keyword, vbTextCompare)
ソースコードを修正した後に実行し、思うような動作がしない場合は改めてコメントいただければと思います。