[[20220429063040]] 『フィルターのVBAについて』(ちゃお) ページの最後に飛ぶ

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

 

『フィルターのVBAについて』(ちゃお)

すいません、VBA初心者です。
ユーザーフォームを作り、一覧表にフィルターがかかるVBAを作ろうとしているのですが、
実行しようとするとエラー(オブジェクトが必要です)が発生してしまいます。
ユーザーフォームはテキストボックスとコマンドボタンがあり、コマンドボタンを押すと、テキストボックス内の言葉でフィルターをかけてくれるものを目指してます。
エラーの理由と解決方法をどなたか教えて頂けないでしょうか?

(VBA)

Sub 検索()

  If UserForm1.Box1.Text <> "" Then
     Range("A1").AutoFilter 1, "*" & UserForm.Box1.Text & "*"   ⬅️ここで実行時エラー424
  Else
     Range("A1").AutoFilter 1
  End If  

End Sub

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


テキストボックスのオブジェクト名が間違っていなければ
1が抜けているからなのでは
^^;
あと
シートは指定
変数は
Option Explicitを設定したほうが何かと
エラー防止につながるかと。。。
でわ
m(__)m
(隠居Z) 2022/04/29(金) 07:52

あい、すみませんm(__)m
↑だとエラー番号が違うようです

私のコメントはスルーして下さい。
すみませんでした。
m(__)m
(隠居Z) 2022/04/29(金) 08:13


こんにちは。
目的は似ているかと思いますのでご参考に
私は
ユーザーフォーム上にテキストボックスを上に配置してその下にリストボックスを配置しています。
内容はテキストボックスに文字を入れていくと下のリストボックスに入力されている文字と一致する
ものが表示されてダブルクリックで選ばれ格納される。
文字数を増やしていくとフィルタが掛かっていく内容です

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'リストボックスの値をダブルクリックしたときに実行するコード
Dim buf As String
'リストボックスの値を変数bufに格納する
buf = Me.ListBox1.Value
'メッセージボックスにリストボックスの値を表示する
Worksheets("????").Range("J2").Value = ListBox1←選んだものを格納する場所

Private Sub TextBox1_Change()
'テキストボックスの内容が変化したときに実行するコード
Dim lstDat As Variant
Dim buf As String, bufLen As Integer
Dim rowEnd As Long
Dim i As Long
'D列の最終行を調べ、変数lstDatにD列の値を格納
With ThisWorkbook.Worksheets("表示マスタ")
rowEnd = .Cells(Rows.Count, 1).End(xlUp).Row
lstDat = Worksheets("表示マスタ").Range(.Cells(1, 1), .Cells(rowEnd, 1)).Value
End With
'テキストボックスの内容と文字数を変数buf,bufLenに格納
buf = Me.TextBox1
bufLen = Len(buf)
'リストボックスの内容を初期化
Me.ListBox1.Clear
'テキストボックスの文字数が0の場合終了
If bufLen = 0 Then Exit Sub
'テキストボックスの内容とlstDatの内容を比較する
For i = 1 To rowEnd
'一致した場合にリストボックスに値を追加する
If buf = Left(lstDat(i, 1), bufLen) Then
Me.ListBox1.AddItem lstDat(i, 1)
End If
Next i
End Sub
ここでの表示マスタはテキストボックスに入力された文字を検索する候補を保管しておくシートです。

こんな感じでできますでしょうか?
(ぶんぶん) 2022/04/29(金) 08:29


 UserForm.Box1?
 ↑
 ・・・・.Box1 というのは存在しません。
 プロパティウィンドウでオブジェクト名はどうなっていますか。
 デフォルトでは TextBox1 です。

 こちらでは
   コンパイルエラー:
   メソッドまたはデータメンバがみつかりません。
 と表示されます。

(nm) 2022/04/29(金) 09:20


 >エラーの理由と解決方法をどなたか教えて頂けないでしょうか?
 >Range("A1").AutoFilter 1, "*" & UserForm.Box1.Text & "*"   ⬅️ここで実行時エラー424

 エラーの箇所をよく眺める事です。(隠居Z)さんが言ってる…まずは ココ
 UserForm ← "1" が無い

 Sub 検索_Click()
    If UserForm1.Box1.Text <> "" Then
     Range("A1").AutoFilter 1, "*" & UserForm1.Box1.Text & "*"
  Else
     Range("A1").AutoFilter 1
  End If
 End Sub

(あみな) 2022/04/29(金) 10:49


 あみなさん
 実行してみましたか。
「.Box1」の所でエラーが出ませんか。
 UserForm1.Box1.Text は構文が間違っているんですよ。
 デフォルトだと TextBox1.Text ですよね。
 なぜ「.」が2個あるんですか。
「UserForm1.Box1.Text 」を「TextBox1.Text」に変更して実行してみれば分かりますよ。

(nm) 2022/04/29(金) 11:41


 (nm)さん

 (ちゃお)さんが、デフォルトでは TextBox1を、オブジェクト名を Box1 に
 変更した事を想定しています。

 実際には、本当に間違いなのか? は、わかりません^^;
 デフォルトだと TextBox1.Text です

 表を適当に作ってテストしましたが、(あみな) 2022/04/29(金) 10:49 のコードで
 エラーは、でませんでした。

 田んぼの”田”でも検索してみたw		

    |[A]      |[B] |[C] |[D]   			
 [1]|社員名   |性別|年齢|部署  			
 [2]|堀 晃司  |男  |  45|営業部			
 [3]|米田 沙耶|男  |  55|総務部			
 [4]|斎藤 由樹|女  |  28|経理部			
 [5]|仲田 俊二|男  |  48|営業部			
 [6]|永野 陽子|女  |  38|総務部			

(あみな) 2022/04/29(金) 11:55


 >(あみな) 2022/04/29(金) 10:49 のコードで
 >エラーは、でませんでした。
 こちらではエラーが出ます。
 TextBox のオブジェクト名を UserForm1 として
 UserForm1.Box1.Text を UserForm1.Text とするとエラーは出ません。

 質問者の返信を待つことにします。

(nm) 2022/04/29(金) 15:46


標準モジュールのコードかもしれません。
であればユーザーフォームは省略出来ません。
(ax) 2022/04/29(金) 16:52

(nm)さんへ

 条件1.

 (ちゃお)さんが、デフォルトでは TextBox1を、オブジェクト名を Box1 に	
 変更した事を想定しています。	

 条件2.( 質問者さんが言うには )

 >ユーザーフォームはテキストボックスとコマンドボタンがあり、コマンドボタンを押すと	
 >テキストボックス内の言葉でフィルターをかけてくれるものを目指してます。	

 ユーザーフォームに、コマンドボタンを設置して	
 標準モジュールにマクロを記載するとは考えにくい。	
 標準モジュールのコードなら、(ax)さんのおっしゃるとおりですね。	

 ユーザーフォームモジュールにマクロはあるのが一般的だと思うのですが	
 つまり、CommandButton1_Click オブジェクト名を "検索"にしている	

 ただ、質問者さんの最初のコードで、Sub 検索() だと	
 ユーザーフォームを立ち上げる時点でエラーがでます。	
 なので、私は、Sub 検索_Click() としました。	

 Range("A1").AutoFilter 1, "*" & UserForm.Box1.Text & "*" は、	
 ユーザーフォームモジュールなら

 TextBox1 がデフォルトなら、下記のように書くのが普通ですが	
 .AutoFilter Field:=1, Criteria1:="*" & Me.TextBox1.Text & "*"	
 Meが、UserForm1でも、エラーはでないのはご存知のとおりです。

 (nm)さんの 2022/04/29(金) 15:46 での返信ですが
 (あみな) 2022/04/29(金) 10:49 のコードで

 >こちらではエラーが出ます。

 エラーがでますか?ちょいと検証をいろいとしてみます。

(あみな) 2022/04/29(金) 17:39


>ユーザーフォームはテキストボックスとコマンドボタン
素直に TextBox1.Text でいいんじゃん。
(テキスト) 2022/04/29(金) 21:03

私のはちょい意図が違いましたかね。
失礼しました。
(ぶんぶん) 2022/04/30(土) 10:10

>エラーがでますか?ちょいと検証をいろいとしてみます。
(あみな) 2022/04/29(金) 17:39

エラーにならんと思うがな、(nm)氏がなるってか?

>素直に TextBox1.Text でいいんじゃん。
(テキスト) 2022/04/29(金) 21:03

Me.とするとだ、インテリセンス(自動メンバー表示)が使用出来る
入力支援ってやつだな〜使うかどうかは自由だが
入力間違いが減るし、楽になるのはいいぜ(習慣化をするメリット)

《 インテリセンスについて 》
https://excel-ubara.com/excelvba3/EXCELFORM007.html
https://vbae.odyssey-com.co.jp/column3/s33003.html
https://atmarkit.itmedia.co.jp/ait/articles/1712/01/news149_2.html

それよりなんだい

>質問者の返信を待つことにします。
(nm) 2022/04/29(金) 15:46

>TextBox のオブジェクト名を UserForm1 として
>UserForm1.Box1.Text を UserForm1.Text とするとエラーは出ません。

エラーが出る、出ないの問題よりも
俺は、天地がひっくり返っても
TextBox のオブジェクト名を UserForm1 とする事はしない

エラーになるなら、その場所と説明をしたらどうだ
質問者には、そうやって言うだろ

>私のはちょい意図が違いましたかね。
>失礼しました。
(ぶんぶん) 2022/04/30(土) 10:10

ご参考なんだから、気にする事はないと思うぜ
だが、どうせ載せるならインデントくらいは入れてくれ(読みにくい)

とだ、質問者のマクロに近い形で書いてやると、良いかもだ
少し丁寧に書くとか、似せて書くとかだ

 Option Explicit			
 Dim wb As Workbook			
 Dim ws As Worksheet			
 Dim LastRow As Long			
 Private Sub CommandButton1_Click()			

    Set wb = Workbooks("一覧表.xlsm")			
    Set ws = wb.Sheets(1)			
    LastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row			

    With ws.Range(ws.Cells(1, "A"), ws.Cells(LastRow, "M"))			
        If Me.TextBox1.Text <> "" Then			
            .AutoFilter Field:=1, Criteria1:="*" & Me.TextBox1.Text & "*"			
        Else			
            .AutoFilter Field:=1			
        End If			
    End With			

 End Sub			

動けばなんでもいいんだがな(結論)

>私のコメントはスルーして下さい。
>すみませんでした。
m(__)m
(隠居Z) 2022/04/29(金) 08:13

なんで撤回しとんのじゃろ
的確に言うとんねん

質問者の言うエラーは、合っているかわからへんて

(大阪の、たこ焼き) 2022/04/30(土) 13:08


皆様、たくさんのコメントを頂きまして、ありがとうございます。
そして、返信が遅くなり、申し訳ありません。
隠居Z様、あみな様、ご指摘の通りでした。

ただ単に「UserForm」の後ろに「1」が抜けておりました。
そこを修正すれば、正常に機能しました。ありがとうございます。

ユーザーフォームのテキストボックスはBox1としておりました。

他の回答者の方々も、こちらの説明不足にも関わらず、色々と予測した上でご回答頂き、
ありがとうございます。
非常に勉強になりました。

皆々様、ありがとうございました。
(ちゃお) 2022/04/30(土) 23:01


コメント返信:

[ 一覧(最新更新順) ]


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