電子書籍の厳選無料作品が豊富!

いつもお世話になっております
遣りたいこと

ワークシート内 検索 HITしたら
すべて選択する
以前頂戴しましたコードを

For Each wS In ActiveWorkbook.Worksheets  全部追加
Set myrng = wS.Range("B3").CurrentRegion  ws追加
Set c = wS.Cells.FindNext(after:=c)        ws追加

Set Target = Union(Target, c) この部分で黄色反転します。

わかる方教えてくれませんでしょぅか

Sub azee2r()
Dim myrng As Range
Dim c As Range, Target As Range
Dim myStr
Dim Fall As String
Dim wS As Worksheet

For Each wS In ActiveWorkbook.Worksheets
Set myrng = wS.Range("B3").CurrentRegion

For Each myStr In Array("BBB", "AAA")

Set c = myrng.Find(what:=myStr, LookAt:=xlWhole)
If Not c Is Nothing Then
Fall = c.Address


Do
If Target Is Nothing Then
Set Target = c
Else
Set Target = Union(Target, c)
End If

Set c = wS.Cells.FindNext(after:=c)
Loop Until c.Address = Fall

If Not Target Is Nothing Then

Target.Select

End If
End If
Next
Next
End Sub

質問者からの補足コメント

  • へこむわー

    Set myrng = wS.Range("B3").CurrentRegion
    Set c = myrng.Find
    Set c = wS.Cells.FindNext
    ・・申し訳ございません わかりませんです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/11/12 07:31
  • つらい・・・

    wS.Select
    Target.Select
    付け加えました。
    だけど 前の 検索範囲が間違ってるのかも
    最初のままで、実行すると Target.Select部分で
    rangeクラスのselectメソッドに失敗しました。
    となります

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/11/12 07:36

A 回答 (6件)

だいぶお疲れのようですので、ご質問のコードをローカルで確認して


添削してみました。
Excelのオブジェクト操作や、selectメソッドなど、、判り難いですね。

Dim myrng As Range
Dim c As Range, Target As Range
Dim myStr
Dim Fall As String
Dim wS As Worksheet

For Each wS In ActiveWorkbook.Worksheets
Set myrng = wS.Range("B3").CurrentRegion
For Each myStr In Array("BBB", "AAA")

Set c = myrng.Find(what:=myStr, LookAt:=xlWhole)
If Not c Is Nothing Then
Fall = c.Address

'シート選択用変数宣言
Dim sh_name(), n As Integer

Do
If Target Is Nothing Then
Set Target = c
'該当シート(Targetが見つかったシート)選択用配列
ReDim Preserve sh_name(n)
sh_name(n) = wS.Name
n = n + 1
'-----
Else
Set Target = Union(Target, c)
End If
'未使用(空白)セルに囲まれた塊範囲内をFindNext
Set c = myrng.FindNext(after:=c)
Loop Until c.Address = Fall

If Not Target Is Nothing Then
'セル選択の為シートを選択
wS.Select
Target.Select
End If
End If
Next
'シートごとのRangeオブジェクトを作る為 オブジェクト変数を初期化(解放)
Set c = Nothing
Set Target = Nothing
Next
'最後のシートが選択される為、見つかったシート全てを選択 (最初に見つかったシートがアクティブ)
Worksheets(sh_name).Select

End Sub

補足を入れましたのでどうでしょう。

ちなみにRange("B3").CurrentRegionの外にAAAを入力して実行すると
Set c = wS.Cells.FindNext(after:=c)
選択される
Set c = myrng.FindNext(after:=c)
選択されない

Set myrng = wS.Range("B3").CurrentRegion なので選択されない方が良いのでは?
    • good
    • 0
この回答へのお礼

いつもお世話になっております
とても 思い通りに じっこうされました
しかし、どうすれば、このように
思いどおりに作成することができるのでしょか
わたしも こうなりたいです。
ありがとうございました。

お礼日時:2021/11/12 19:25

No.5です。



>Work_Actveteイベント

Worksheet_Actveteイベント でしたね。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/11/12 19:26

選択してどうしたいのかがわかりませんが、全てのシートの該当セルを選択して一気に何かをするって訳じゃないならアクティブシート内のみで選択するのも宜しいのでは?



Work_Actveteイベントを全てのシートに記載しておいて標準モジュールのSubプロシージャを呼び出すとか。
まぁ全てのシートを同時に監視するって事ならダメなのかもですが、ここは素人的に判断できないです。

余談ですが。
知恵袋放置されてません?
質問内容が類似してたもので違ってたらすいません。
    • good
    • 0
この回答へのお礼

いつもお世話になっております
いろいろ参考にいたしました。
ありがとうございました。

お礼日時:2021/11/12 19:26

Set c = Nothing


Set Target = Nothing
Next
は付けましたか?
もし、該当シート全てを選択する必要があるのであれば、
True条件内にwSを記録して(名前で配列を作る?)最後に該当シート全選択の実行になるか、、アクティブシートはどれにするか、、最初?最後?など

>Set c = myrng.Find
Set c = wS.Cells.FindNext

エラーの原因ではないので良いかも知れませんが、
wS.Range("B3").CurrentRegionはwS.Cellsと同じでは無いけれど
CurrentRegion範囲以外でも存在を確認、選択するのかな、、と
検索範囲は狭い方が良く、同じで良いように思いました。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/11/12 19:25

#1です、、


気になった事を書きましたが、
For Each wS In ActiveWorkbook.Worksheets これですね
複数シートを対象にしているのでシートごとに処理すれば良いと思います。

具体的には
If Not Target Is Nothing Then
wS.Select
Target.Select
End If
End If

Next
Set c = Nothing
Set Target = Nothing
Next

みたいな、、、
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/11/12 19:26

こんばんは、


試していないのですが、
問題なさそうにも見えるのですが、1点だけ上げると
Set myrng = wS.Range("B3").CurrentRegion
Set c = myrng.Find
Set c = wS.Cells.FindNext
検索範囲が違うのはなぜでしょう?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/11/12 19:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!