• ベストアンサー

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

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

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (715/1481)
回答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/17068)
回答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

  • エクセルVBAで列の選択

    VBAで通常は、Columns("D").Select でD列が選択されるはずですが、途中にセルが結合している個所があると、選択範囲の列が、すべての行で広がってしまいます。 手動で列番号をクリックするとD列だけの選択ができるのにVBAではなぜ出来ないのでしょう? どうコードを変えればいいのでしょうか? エクセル2000です。

  • 列を数値で選択する方法をご教授ください

    エクセル2007です。 Columns("a:b").Select なら列を選択できますが、 Columns(1 & ":" & 2).Select だと 「実行時エラー1004、アプリケーション定義またはオブジェクト定義のエラーです」 になってしまいます。 数値にしたい理由は、変数を代入したいからです。 アドバイスよろしくお願いします。

  • Excel VBAで2~4列目の3行目以下を選択

    Excel VBAで2列~4目の3行目以下すべてを選択する方法は、ないでしょうか? 2列~4目すべてを選択というのは、比較的簡単で、たとえば Sub 2to4 ()   Worksheets("Sheet1").Activate   Columns("B:D").Select End Sub とでも書けばよいのでしょうが。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html 要はこれから3行目までを除外する方法があればいいわけですが、 そういう方法があったら教えてください。 今は、cells(2,1)から、cells(4,5000)までを選択といったように 原始的な方法でやってますが、この方法だと数字を大きくしすぎると 2003以前のバージョンでトラブり、数字を小さくしすぎると、選択しきれなかったりと…。 いろいろ不都合が多いので…。

  • VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効にしようとするとエラーが出ることがある。

    お世話になります。 VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効して、下記VBAを作成しました。 しかしながら、起動時(実行時)に 「実行時エラー 5 プロシージャの呼び出し、または引数が不正です。」が出ることがあります。 でないときもあるのですが、 デバック時にとまるところは、毎回変わり(1)~(5)のどれかで止まります。 使用したい環境はexcel2007,excel2003で正常に動くようにしたいのですが、何卒よろしくお願いします。 *************ソース********************* Private Sub Workbook_Open() InsertEnabled False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) InsertEnabled True End Sub Private Sub InsertEnabled(flg As Boolean) With Application (1) Application.CommandBars("Worksheet Menu Bar").Controls("挿入(&I)").Enabled = flg (2) Application.CommandBars("Cell").Controls("挿入(&I)...").Enabled = flg (3)Application.CommandBars("Cell").Controls("削除(&D)...").Enabled = flg (4)Application.CommandBars("Row").Controls("挿入(&I)").Enabled = flg (5)Application.CommandBars("Row").Controls("削除(&D)").Enabled = flg .CommandBars.FindControl(, 296).Enabled = flg .CommandBars.FindControl(, 293).Enabled = flg End With End Sub

  • マクロ 選択範囲と同一の範囲を違う列で選択する

    いつも回答して頂き感謝感謝です。 今回の質問ですが、下記のマクロで日付が入力されている列の範囲選択が出来ましたが、この選択範囲を元に列を任意に変更し同等の行範囲で選択したいのですがどうしたらよろしいでしょうか?思いつく範囲でマクロを記述しましたがさっぱりでした。御指導の程宜しくお願い致します。 ・B4から下方向に日付が連続で入力されている。 ・C3から右方向に商品名が入力されている。 ・上記の交差する箇所に商品の使用回数が入力されている。 Sub 範囲の選択5() Dim Date1 As Date Dim Date2 As Date Dim 商品名 As Variant Dim b1 As Variant Dim b2 As Variant Dim b3 As Variant With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/12/1のように入力してください。") Set b1 = .Columns("B").Find(Date1, , xlValues, 1) If b1 Is Nothing Then MsgBox "入力した日付が見当たりません。再度入力して下さい。": GoTo s1 s2: Date2 = Application.InputBox("最後の日付を2012/12/31のように入力してください。") Set b2 = .Columns("B").Find(Date2, , xlValues, 1) If b2 Is Nothing Then MsgBox "入力した日付が見当たりません。再度入力して下さい。": GoTo s2 .Range(b1, b2).Select s3: 商品名 = Application.InputBox("商品名を入力して下さい。") Set b3 = .Rows("3").Find(商品名, , xlValues, 1) If b3 Is Nothing Then MsgBox "入力した日付が見当たりません。再度入力して下さい。": GoTo s3 .Range(b3).Select End With End Sub

  • エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の

    エクセルVBAのユーザーフォーム上のコマンドボタンに「フォントの色」の機能を搭載したいのですが、具体的にどういうマクロを書けばいいのかわからずに困っています。 CommandBars.FindControl(ID:=401).Execute 以下のような行をコマンドボタンに登録してみたのですが、実行するとコマンドメニュー上の「フォントの色」ボタンの下に、色の選択肢がポップアップされてしまいます。ユーザーフォーム上のボタンのしたに、色選択のポップアップを表示したいのですが、どなたか方法をご教示いただけますと幸いです。

  • エクセル2007VBAの質問です。

    エクセル2007VBAで下記の事をしたいのですがうまくいきません。 ・エクセルシートの数式を消して値を残したものを別名で保存する。 ※保存時は「名前をつけて保存」ダイアログを出したいです。 現在は、下記内容で記述してみましたが、保存されません。 初心者がネットで調べて書いたので、めちゃくちゃな所があると思いますが宜しくお願いします。 ------------------------------------------------------------- Sub シートコピー() ' ' シートを別のブックにコピーする。 ' ' Const cnsTITLE = "エクセル作成" Const cnsFILTER = "エクセルファイル (*.xls),*.xls" Const xlsfile = "C:\temp\ファイル名を入力して下さい。" ' Columns("A:R").Select Selection.Copy Workbooks.Add Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Set xlsApp = Application xlsApp.StatusBar = "出力ファイル名を指定して下さい。" strFILENAME = xlsApp.GetSaveAsFilename(InitialFileName:=xlsfile, _ FileFilter:=cnsFILTER, title:=cnsTITLE) End Sub -------------------------------------------------------------

  • エクセルマクロで列を削除したい

    エクセル2013です。 マクロの途中で列を削除するようにしてあります。 A列~J列、N列~Q列、T列~U列、W列~Y列を一括削除なのですが A列~J列だけは、作業者が選択した1列だけを残して削除をしたいです。 マウスで選択させて、列を指定する所までは作成できましたが 列削除の部分(★の部分)が 思うように作成できず完成できません。 アドバイスをお願いいたします。 Sub 列削除() Dim マウス選択 Dim 選択列 Dim 選択月表示 Dim 質問 On Error GoTo myError 'INPUT-BOXでキャンセルを選択した時の回避 Set マウス選択 = Application.InputBox("回覧用に編集したい月の列を選択してください", Type:=8) If マウス選択.Columns.Count > 1 Then '選択したしたのが列で有り1列であるか確認 MsgBox "選択したのは列ではありません。又は2列以上を選択しています" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If If マウス選択.Rows.Count > 1 Then '選択したのが行又はセルの場合の処理 Else MsgBox "行又はセルを選択しています。1列を選択してください" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Set マウス選択 = マウス選択.EntireColumn Debug.Print マウス選択.Address 選択列 = マウス選択.Column 'INPUT-BOXで選択した列を数字に置き換える 選択月表示 = Cells(2, 選択列).Value '選択した列の8行目のセルの値を格納 If 選択列 > 10 Then '選択したのが11列以上の場合の処理 MsgBox "11列目以降は選択できません" MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" '不要列削除 ★ Union(Columns("A:J"),Columns("N:Q"), Columns("T:U"), Columns("W:Y")).Delete Else MsgBox "プログラムを中断します" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub 'プログラム停止 End If Exit Sub 'エラーが出なかった時のmyErrorの回避用 myError: 'INPUT-BOXでキャンセルを押した時の処理 MsgBox "キャンセルが押されました。プログラム終了します。" Application.DisplayAlerts = False Application.DisplayAlerts = True Exit Sub End Sub

  • vba シートの選択後列の選択

    VBA初心者中の初心者です。 vbaでシート全体を選択後、全シート共通でI列全体を選択したいのですが、 Worksheets.Select Columns("i:i").Select と書くと、なぜかB列からI列全体が選択されてしまいます。 I列だけ(全シート共通)を選択したいのですが、どのようにすればよいのでしょうか? よろしくお願いいたします。

  • エクセル データのある最終列~最終列から数えて4つ目までの列を削除する

    エクセル データのある最終列~最終列から数えて4つ目までの列を削除するマクロ ネットで調べましたところActiveSheet.UsedRange.Columns.SelectでA~最終列までは選択できました。 これをタイトルの様に4列目までを選択し削除するにはどうすればよろしいのでしょうか? どなたかご教授の方よろしくお願い致します。 使用環境:Windows7x64 エクセル 2007

専門家に質問してみよう