今会社でエクセルを作成しています。
使用しているエクセルは2003です。
Ctrl+Fの機能とオートフィルタの機能を足したものを作成しようとしています。
現在 入力している内容は下記になります。
Dim txt As String
Dim target As Range
Dim rng As Range
Dim adr As String
'Set target = Range("A6:L6 & Rows.Count) '
txt = InputBox("検索する内容を記述して下さい。")
If txt = "" Then Exit Sub
Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart)
If rng Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
adr = rng.Address
Do
rng.Activate
Set rng = Range("A6:L" & Rows.Count).FindNext(rng)
If rng.Address = adr Then MsgBox "終わりに達しました"
If MsgBox("続けて調べますか?", vbYesNo) = vbNo Then Exit Do
Loop
End Sub
項目はA6からL6までに記入されていきます。
一部内容は空白の部分もでますが、A6・B6は必須入力です。
下方向に内容が無限に増えて行きます。
現在エラーで
“オブジェクト変数または With ブロック変数が設定されていません”と出てしまっています。
Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart)
ここの部分がおかしいように思われます。
ですが、どう直せばいいのか分からず先に進めません…
皆様の知識をお借りできればと思い投稿致しました。
何卒宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
こんにちは。
検索する範囲の指定がうまく行ってないようですね。
検索する範囲は固定のようですから、
指定を一カ所に纏めておくと、スッキリして後から修正し易いです。
せっかく変数を使っているのですから、
.FindNextメソッドのオブジェクト指定もtargetを使うようにしましょう。
Set target = Range("A6:L" & Rows.Count)
txt = InputBox("検索する内容を記述して下さい。")
If txt = "" Then Exit Sub
Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart)
If rng Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
adr = rng.Address
Do
rng.Activate
Set rng = target.FindNext(rng)
If rng.Address = adr Then MsgBox "終わりに達しました"
If MsgBox("続けて調べますか?", vbYesNo) = vbNo Then Exit Do
Loop
もうひとつRange型変数 target を省略して、With フレーズを使った例。
With Range("A6:L" & Rows.Count)
txt = InputBox("検索する内容を記述して下さい。")
If txt = "" Then Exit Sub
Set rng = .Find(txt, After:=.Cells(.Count), LookAt:=xlPart)
If rng Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
adr = rng.Address
Do
rng.Activate
Set rng = .FindNext(rng)
If rng.Address = adr Then MsgBox "終わりに達しました"
If MsgBox("続けて調べますか?", vbYesNo) = vbNo Then Exit Do
Loop
End With
それから、
Range("A6:L" & Rows.Count)
検索する範囲は、なるべく限定的に指定した方が良いです。
VBAでもExcelの検索機能でも、必ずしも最終行まで探す訳ではありませんけれど、
シートの構成に因っては処理に大きな時間が掛かる場合もありますので、
例えば、どこかひとつの列(仮にA列)を基準に最下行を決める、
Range("A6:L" & Cells(Rows.Count, "A").End(xlUp).Row)
とか、場合によっては.CurrentRegion プロパティを使うなどして、
範囲を限定するようにしておいた方がトラブルを減らせますし、
他人が読んでも理解しやすいものになります。
以上です。
この回答への補足
まだまだ素人なので、変な組み方をしてしまった様です。
ご丁寧に有難う御座います。
お陰様で一旦解決出来ました!
因みにオートフィルタの場合自分で選択をするとデータが抽出されますが、それをこの様な検索窓を使って抽出する事は出来ますか??
Ctrl+Fの検索の機能とオートフィルタのような抽出機能を併せ持ったものってマクロで組めるのでしょうか??
No.4
- 回答日時:
#2、3、cjです。
#3補足欄へのレスです。> Ctrl+Fの機能とオートフィルタの機能を足したものを作成しようとしています。
というお望みだということまでは理解できますが、
具体的にどのように抽出したいのか、情報が不足しているので、
答えるのが難しいのです。
今こちらで解っているのは、
<元の質問>
> 項目はA6からL6までに記入されていきます。
> 一部内容は空白の部分もでますが、A6・B6は必須入力です。
> 下方向に内容が無限に増えて行きます。
<#2補足>
> 因みにオートフィルタの場合自分で選択をするとデータが抽出されますが、それをこの様な検索窓を使って抽出する事は出来ますか??
> Ctrl+Fの検索の機能とオートフィルタのような抽出機能を併せ持ったものってマクロで組めるのでしょうか??
足りない情報は、
「どの列を基準に」
「どんな条件(文字列であれば完全一致なのか部分一致なのか)で」
フィルタを掛けたいのか、
また、「検索機能とどのように関連付けるのか」
などです。
"オートフィルタの場合自分で選択をするとデータが抽出されます"
ということですので、
実際、手作業では、どこかの列を指定して抽出をされている筈です。
特定の列を基準にしているのであれば、
例えば仮に「B列を基準に」「部分一致で」抽出するなら
Sub Sample8335126()
Dim txt As String
txt = InputBox("抽出する内容を記述して下さい。")
If txt = "" Then Exit Sub
Range("A5:L" & Cells(Rows.Count, "A").End(xlUp).Row).AutoFilter Field:=2, Criteria1:="*" & txt & "*"
End Sub
骨格としては以上のようになりますが、これではお求めの答えになっていないのでしょう。
後は、これを検索機能とどのように組み合わせたいのか、
もう少し、ご自身でオーダーを整理しないと、こちらも手を付けられません。
"オートフィルタの場合自分で選択をするとデータが抽出されます"
ということを無視するならば、
実際には手作業で出来ていないことをマクロで実現したい、という解釈も成り立つ訳で、
例えば、
「A:L列の範囲に6行めから(タイトル含まず)始まる表があり、
その表の中で指定の文字列が含まれるセルすべてについて
その行を抽出したい」
というようなことでしたらば、それはオートフィルタではなくて、
フィルタオプションを使って実現することになります。
その場合は列に固有の項目行が必要になりますから、
5列めがどうなっているのか解れば、何とかできるかも知れません。
これならば、
「検索して見つかればフィルタオプションで抽出する」
といった具合に、検索と抽出を組み合わせたい、というのも理解できます。
この他にも想像できるオーダーの解釈は数十通りありますけれど、
「これだ!」と言い当てるには根拠が少な過ぎます。
何をしたいのかハッキリと言葉にして、
改めて質問した方が早く解決できるのではないですか、
ということを書いていたつもりだったのですけれど。
ご検討なさってみてください。
No.3
- 回答日時:
#2、cjです。
#2補足欄へのレスです。> 因みにオートフィルタの場合自分で選択をするとデータが抽出されますが、それをこの様な検索窓を使って抽出する事は出来ますか??
こちらを参考になさってください。
『オートフィルタを使い倒す』
http://officetanaka.net/excel/vba/tips/tips155.htm
抽出条件の指定方法として、ご提示のコードの流れを汲んで変数txtを使えば
...Criteria1:=txt
のようにすればよろしいかと。
部分一致を抽出するなら
...Criteria1:="=*" & txt & "*"
のようにワイルドカードを挿入します。
最新のバージョンでは、他のアプローチもあるようですが、
VBAからはAutoFilterを扱うのが簡単ですし、
今の所、情報も多いので安心だと思います。
質問者さんなら応用できると思いますが、
もしうまく行かないようでしたら、改めてお訊ねください。
この回答への補足
今貴殿に教えて頂いたものを使用しています。
Sub ボタン24_Click()
With Range("A6:L" & Rows.Count)
txt = InputBox("検索する内容を入力して下さい。")
If txt = "" Then Exit Sub
Set rng = .Find(txt, After:=.Cells(.Count), LookAt:=xlPart)
If rng Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
adr = rng.Address
Do
rng.Activate
Set rng = .FindNext(rng)
If rng.Address = adr Then MsgBox "終わりに達しました"
If MsgBox("続けて調べますか?", vbYesNo) = vbNo Then Exit Do
Loop
End With
End Sub
となっております。
お陰様でこれは快適に動いてくれています。
ですが!これに教えて頂いたコードを入力しても
何故か動きません…
お手数でなければ、これのどこにコードを入力しているか教えて頂けますか。
申訳ありません…
No.1
- 回答日時:
変数targetに何も設定されていないようです。
Set target=の行が 'でコメント行になっているようですが・・・
ついでに、Rangeの中も変な感じです。
Set target = Range("A6:L" & Rows.Count)
でしょうか。
この回答への補足
まだはじめたばかりで分からない事ばかりで
本当にご丁寧に有難う御座います。
上記の方と同じく、もしよければもう少し質問をさせて下さい。
----以下引用----
因みにオートフィルタの場合自分で選択をするとデータが抽出されますが、それをこの様な検索窓を使って抽出する事は出来ますか??
Ctrl+Fの検索の機能とオートフィルタのような抽出機能を併せ持ったものってマクロで組めるのでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルのオートフィルタで最...
-
Excelのオートフィルタで非表示...
-
エクセルの偶数行(奇数行)の抽出
-
エクセル、オートフィルタで最...
-
エクセル関数で、数字の入った...
-
Excelオートフィルターで絞り込...
-
なぜShowAllDataだとうまく行か...
-
ACCESSでスペースの抽出
-
オートフィルタは金額の桁カン...
-
【excel】リスト内の条件にあっ...
-
エクセルにて、フィルタをかけ...
-
エクセルVBA/StatusBarの表示文...
-
Excel共有ブックのオートフィル...
-
access マクロでのフィルタの...
-
アクセスにはオートフィルタは...
-
【EXCEL】条件に一致した最新デ...
-
今日の日付のデータをすばやく...
-
【大至急】エクセルで、検索語...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで時刻(8:00~20:00)...
-
エクセルのオートフィルタで最...
-
エクセルでオートフィルタのボ...
-
Excelのオートフィルタで非表示...
-
エクセルの偶数行(奇数行)の抽出
-
エクセル関数で、数字の入った...
-
Excel共有ブックのオートフィル...
-
エクセルで、条件に一致した行...
-
エクセル・条件付で行を削除す...
-
access マクロでのフィルタの...
-
オートフィルタで3つ以上の条...
-
オートフィルタで選択したデー...
-
エクセルにて、フィルタをかけ...
-
可視セルを対象としたcountifが...
-
【EXCEL】条件に一致した最新デ...
-
VBA オートフィルタで抽出した...
-
今日の日付のデータをすばやく...
-
【Excel/関数/条件付き書式】月...
-
なぜShowAllDataだとうまく行か...
-
エクセルのオートフィルタで困...
おすすめ情報