• ベストアンサー

VBA 検索列がエクセル側で選択されない状態で検索

Columns("B:B").Select Const find_replace = 1849 Application.FindFormat.Clear Application.CommandBars.FindControl(ID:=find_replace).Execute B列を選択し検索ダイアログを表示させています。 このコードだと、Excel上でB列が選択され、パッと見、どこを選択しているかモロばれで、みっともないのですが、 エクセル上でそれが見えないよう、VBAを変更することはできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (774/1620)
回答No.2

CommandBars を使う限り無理ですね。 検索文字は、InputBoxかユーザーフォームを使うようにします。 検索をしたいのか、痴漢をしたいのか判らないので、両方載せます。 選択をしたくないという事なので、検索は表示だけにします。 ユーザーフォームは面倒なのでInputBoxです。 Option Explicit ' Sub Macro1()   Dim What As String   Dim Find As Range   Dim StartAddress As String   Dim AddressEs As String '   What = InputBox("検索ワード", "全件検索")   On Error GoTo 0   Set Find = [B:B].Find(What) '   If Find Is Nothing Then     MsgBox "見つかりません", vbCritical     End   End If   Find.Select   StartAddress = Find.Address '   Do     AddressEs = AddressEs & "," & Find.Address(False, False)     Set Find = [B:B].FindNext(Find)   Loop Until Find.Address = StartAddress   MsgBox Mid(AddressEs, 2) End Sub ' Sub Macro2()   Dim What As Variant '   What = InputBox("検索ワード, 置換ワード", ", 区切りで入力して下さい", ",")   What = Split(What, ",")   [B:B].Replace What(0), What(1) End Sub

nanakora
質問者

お礼

ありがとうございました。 2通りの方法を書いていただき感謝します。 おかげさまで、うまくできました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

セルの値を検索するのに、難しい、珍しい方式で検索している(Application.CommandBars.FindControlを使っている) が、そういう方式以外の方法ではだめなのか。 ーー Range.Replaceを使う方式です。その場合 Columns("B:B").Selectのように選択しないで、 Sub test03() Range("B:B").Replace What:="gg", Replacement:="XXX" End Sub のようにすれば、どうか?これも意図に合わないか? ーー CommandBars.FindControlを使う方式は、検索該当結果が個別に表的に表示されるのが 気に入っているのかな。

nanakora
質問者

補足

このマクロを作成した理由は、「どの文字を検索するかは毎回変わる」ということ、更に「検索して、B列内にデータが存在するかどうかだけを知りたいだけ」という理由です。 .Replace What:="gg", Replacement:="XXX" ↑は、検索文字「gg」置き換え文字「XXX」固定です。 ただ、検索文字は「gg」とは限らず、次は別の文字を検索したいかもしれない。 そして、XXXなどに置き換えはしないということです。 その為に、毎回ダイアログを出すコードを作成しています。 B列を選択しないまま、検索ダイアログを出して検索させる…ことは出来ないのかな?と思いました。

関連するQ&A