[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フィルターで見つからなかった時』(フィルター)
こんにちわ。
下記のコードで指定の列(ここでは24列目)の指定の文字列でフィルターをかけているのですが。
その文字列が見つからなかった場合に、「見つかりません」のようなコメントを表示し、フィルターを実行されないようにしたいのですが、どのようにすればよいでしょうか。
見つかりませんの時にOKボタン等を押して消すような感じだとよいのですが。
宜しくお願い致します。
Private Sub CommandButton2_Click()
Dim myFld As String, myCri As String
Dim myRow As Long myFld = 24 myCri = InputBox("検索する文字列は?") Worksheets("Sheet1").Range("A1").AutoFilter Field:=myFld, Criteria1:=myCri
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
宜しくお願い致します。
(フィルター) 2019/02/01(金) 09:48
Sub Sumple() Dim MyCri As String MyCri = InputBox("検索する文字列は?")
With ThisWorkbook.Sheets("Sheet1") If .Range("X:X").Find(MyCri, , , xlWhole) Is Nothing Then MsgBox "見つかりません", vbCritical Else .AutoFilterMode = False .Range("A1").AutoFilter 24, MyCri End If End With End Sub
(TAKA) 2019/02/01(金) 09:53
Sub Sumple2() Dim MyCri As String MyCri = InputBox("検索する文字列は?")
With ThisWorkbook.Sheets("Sheet1") .AutoFilterMode = False .Range("A1").AutoFilter 24, MyCri If WorksheetFunction.Subtotal(3, .Range("X:X")) < 2 Then MsgBox "見つかりません", vbCritical .AutoFilterMode = False End If End With End Sub
(TAKA) 2019/02/01(金) 09:57
先に【検索】をして、見つかった場合のみオートフィルタをかける方法
Sumple2
オートフィルタをかけ、結果がなかった場合のみフィルタを元に戻す方法
参考にしてください、、
(TAKA) 2019/02/01(金) 09:59
Private Sub CommandButton2_Click() 'Dim myFld As String ' ← 列"番号"が入るから[Integer]や[Long]のほうがよいでしょう Const myFld As Long = 24 '←固定なら定数とするのもあり
Dim 範囲 As Range
Dim myCri As String Dim myRow As Long '←提示されたコードでは使ってないですね
myCri = InputBox("検索する文字列は?") If myCri = "" Then Exit Sub 'キャンセルされたら「myCri」が空っぽのままなのを利用
With Worksheets("Sheet1")
'.Range("A1").AutoFilter を実行したときにフィルタがかかる範囲 Set 範囲 = .Range("A1").ClearContents
'範囲の24列目に対象データが何個あるか数える If Not Application.CountIf(myCri, 範囲.Columns(myFld)) Then 'not 0 → not False → True つまり0こだったら MsgBox myCri & " はありません" Exit Sub End If
.Range("A1").AutoFilter Field:=myFld, Criteria1:=myCri End With End Sub
TAKAさんと同じで、要は、オートフィルタの操作をするまえに、データの有無をチェックしちゃえばよいって考え方です。
あと、個人的にはFindメソッド(通常操作の「検索」のこと)を使う場合、名前付き引数を省略するとわからなくなりそうなので、慣れないうちは名前付き引数を省略することはお勧めしてないです。
(分かるので気になりませんというのであれば問題ないです)
なお、引数自体の省略はもっとおすすめしないです。
名前付き引数を省略してもすぐにわかるくらいなら説明はいらないとおもいますが一応
検索に失敗するとき(Findメソッドの引数省略時に起きる失敗) https://www.moug.net/tech/exvba/0150111.html
(もこな2) 2019/02/01(金) 11:29
もこな2さまありがとうございます。
そのまま貼り付けをしてテストしてみたところ、
Set 範囲 = .Range("A1").ClearContents
の部分でエラーを発してしまいました。
(フィルター) 2019/02/01(金) 11:51
一応テスト済みですが、どうでしょう? 些細なことなのですが、手作業のオートフィルターの検索と、若干結果が異なります。 血液型の列があったとして、 手作業の場合 a と入れると、A ABが出ますが 下記の場合、a と入れると、Aのみになります。
Private Sub CommandButton2_Click() Const myFld As Long = 24 Dim myCri As String Dim myRng As Range Set myRng = Range("A1") myCri = InputBox("検索する文字列は?") If Me.FilterMode = True Then Me.ShowAllData myRng.AutoFilter End If Select Case True Case myCri = "" MsgBox "検索文字が入力されていません"
Case Application.CountIf(myRng.Offset(, myFld - 1).EntireColumn, myCri) > 0 myRng.AutoFilter Field:=myFld, Criteria1:=myCri
Case Else MsgBox "検索対象がありません" End Select End Sub (稲葉) 2019/02/01(金) 12:08
誤 Set 範囲 = .Range("A1").ClearContents
正 Set 範囲 = .Range("A1").CurrentRegion
スマホからなので、他にもミスってるかもですがとりあえず。
(もこな2) 2019/02/01(金) 12:30
>検索してから解除せずに次の検索をする使用方法の為なのか、エラーになってしまいました。 解除って??? (TAKA) 2019/02/01(金) 13:33
・一行目を見出しとしてデータは二行目から始まってますか? ・A1 が表の始点(一番左上のセル)になってますか? ・A列からX列(24列目)までの間に、見出しも含めて全て空白の列は存在しないですか? ・表のA1を選択した状態で、Ctrl + * を押したときに表全体が正しく選択されますか? ・X列には数式が入っていませんか?
思いつくのはこれくらいかな、、 エラーはどんなエラーなんでしょうか。
一応、何も入力しなかった場合のことを考えるならこうですかね。
Sub Sumple() Dim MyCri As String MyCri = InputBox("検索する文字列は?")
If MyCri <> "" Then With ThisWorkbook.Sheets("Sheet1") If .Range("X:X").Find(MyCri, , , xlWhole) Is Nothing Then MsgBox "見つかりません", vbCritical Else .AutoFilterMode = False .Range("A1").AutoFilter 24, MyCri End If End With End If End Sub
(TAKA) 2019/02/01(金) 14:01
あいまい検索、元からシートにフィルタがかかってる場合 を考慮するとこうなります
Sub Sumple() Dim MyCri As String MyCri = InputBox("検索する文字列は?")
If MyCri <> "" Then With ThisWorkbook.Sheets("Sheet1") .AutoFilterMode = False If .Range("X:X").Find("*" & MyCri & "*", , , xlWhole) Is Nothing Then MsgBox "見つかりません", vbCritical Else .Range("A1").AutoFilter 24, "*" & MyCri & "*" End If End With End If End Sub
(TAKA) 2019/02/01(金) 14:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.