[[20100123005311]] 『検索窓を常にクリアな状態(空白)にしておくマク』(ほっとまっと) ページの最後に飛ぶ

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

 

『検索窓を常にクリアな状態(空白)にしておくマクロ』(ほっとまっと)
EXCEL 2003

Application.Dialogs(xlDialogFormulaFind).Show

一番最初は、検索窓に何も表示されていない空白の状態です。

ところが二度目からは、ここに検索文字が入ってしまいます。

何度検索しても、常に検索ウインドウが真っ白な状態にしておくマクロはないでしょうか。

SENDKEYSを使ってもどうもうまくゆきません。

ご教授ください。よろしくお願いいたします。


こんなのでいいと思います。

    Cells.Find ""
    Application.CommandBars.FindControl(, 1849).Execute

名前忘れました。(汗

Excel2000以前ならば、

    application.dialogs(xlDialogFormulaFind).Show ""
でいいと思いますが、Excel2002以降ならば、Excelが
クラッシュする場合が多いですね。
2002以降は上に書いてあるようにFindControlメソッドを
利用するのが安全です。

(Abyss)


早速のお返事ありがとうございます。(ほっとまっと)

確かに、Abyssさんの方法でうまくゆきました。

私は数百件のデータを連続検索している関係で、

桃(検索キーワード) 検索後、検索ウインドウが空白になる。

次にすぐに別のキーワードを入力、という風にしたいと思いました。

普通の検索では、検索ワードの後ろにカーソルが立ってしまい、

桃|(カーソルが点滅)

このまま次のワードを入力すると、桃柿(次の検索ワード)になってしまいます。

今は桃|(カーソル点滅)から、ダブルクリックして入力待ち状態にしてから、

連続検索しているのですが、

ダブルクリックの手間を省きたくて、検索窓を空白にする方法を質問させていただきました。

たしかに教えられた方法ですと、空白になるのですが、

今の自分のマクロの知識の限界ですと、ダブルクリックする代わりに、

一度検索ウインドウを閉じて、

毎回このマクロボタンをおさなければなりません。

このままでは連続検索にはなりません。

教えられた方法に一工夫することで、連続検索になる方法はありますでしょうか。


 質問の直接の回答ではありませんが、検索した結果をどのように処理しているの
 でしょうか。

 マクロを使用しているのであれば、検索する一覧をどこかのセルに列挙しておき、
 順番に検索してそれぞれの処理の結果を検索値の横に記録しておくなどの処理で
 あれば、マクロで一括処理可能です。

 どうしても検索結果を人の目で見ていく作業であれば、読み飛ばしてください。
 (Mook)

mookさん、ありがとうございます。(ほっとまっと)

おっしゃられるように、人目を介する作業です。

手入力の部分もありまして、どうにかしてダブルクリックやデリートなしに、

連続入力、連続検索できる術がないかを模索しております。

センドキーで、検索ウインドウを毎回開く手も考えたのですが、

たとえばCTRL+F+エンター+エンターでやると、

検索ウインドウに、桃(検索ワード)F

となってしまうだけで、うまくゆきませんでした。


 お求めの回答ではないのですが……
Shift + Homeで検索文字列を範囲選択する方が
ダブルクリックよりは簡単かな?
と思ったので一応。
(ご近所PG)


 ダブルクリックはマウスに持ち替えるのが面倒ですが
 デリートって言うのは、、、バックスペースの事かな?
 これは、文字数分押さないといけないのが面倒なのでしょうか。

 Tabキーで一巡する。(7回押す。)
 或いは Tabキーと Tab + Shift で行ったり来たり
 で少しはストレスが和らぐかも?

 (HANA)

 特定セルにワークシートチェンジイベントで文字が入力されたら検索かフィルタリング
 としておいて、マクロでショートカットキーを設定して(Ctrl+Shift+Fなど)押すと
 そのセルへ飛んで文字の選択状態(消しちゃうとイベント発生なので)にする
 っていうのはいかがですか?
 (通りすがり)

 本質的にはそこまで面倒な作業とは思いませんが
 もし、私が実現するとしたらユーザーフォームで検索ダイアログを作ってしまいます。
 コントロールのイベントを使えば検索後にTextBoxの値をクリアするくらい簡単ですし
 自分好みの検索条件設定なんかも出来ると思いますので。

 ただ、検索後にクリアしたいだけの為に作るのでは手間かもしれませんけどね。
 (momo)

 載せておられるコードって、どうやって終了するのですか?
 それから、「Workbook_SheetSelectionChange」で良いのですか?

 こんな感じのコードはどうでしょう?
 '------
Sub 検索()
Dim kensaku As Variant
On Error Resume Next
    Do
        kensaku = Application.InputBox("番号を入力")
        If kensaku <> False And kensaku <> "" Then
            Cells.Find(What:=kensaku, After:=ActiveCell, LookIn:=xlFormulas, _
                        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
            If Err.Number > 0 Then
                MsgBox "データがありません"
                Err.Number = 0  '←この行、修正しました。
            End If
        End If
    Loop Until kensaku = False Or kensaku = ""
End Sub
 '------

 そうそう、この掲示板の使い方ですが
_←ここに半角スペースを入れると
 空行を入れなくても改行がそのまま表示されるように成りますよ。

 (HANA)

 皆様、ありがとうございます(ほっとまっと)

momoさま ユーザフォームなんとかできそうです。
hanaさま コマンドまで書いていただいてありがとうございます。

Private Sub CommandButton1_Click()

 Dim kensaku As Variant
 kensaku = UserForm1.TextBox1.Value
Cells.Find(What:=kensaku, After:=ActiveCell, LookIn:=xlFormulas, _
                        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

 TextBox1.Value = ""
 TextBox1.SetFocus
 End Sub

 なんとか検索フォーム、ここまでは書けるようになりました。

 またこのやり方だと2回enterが必要でした。
 CTL+Fで表示される検索窓のように、一回のenterで検索することも可能でしょうか。

またhanaさまのコマンドを流用して下記のようにしたところ、検索が無限になってしまいました。

On Error Resume Next

    Do
        kensaku = UserForm1.TextBox1.Value
        If kensaku <> False And kensaku <> "" Then
            Cells.Find(What:=kensaku, After:=ActiveCell, LookIn:=xlFormulas, _
                        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
            If Err.Number > 0 Then
                MsgBox "データがありません"
                Err.Number = Clear
            End If
        End If
    Loop Until kensaku = False Or kensaku = ""

   TextBox1.Value = ""
 TextBox1.SetFocus

 inputではうまくいったのですが
 これをこのままユーザーフォームに流用した私がいけなかったのでしょうが、
 なにとぞお知恵を貸してください。
 あと少しで自分の思うような作業ができそうなので、よろしくお願いいたします。

 今回の御質問とは関係ない部分ですが
 コードの記載に誤りが有りました。
 >Err.Number = Clear
 部分は
  Err.Number = 0
 に変更して下さい。

 私が載せた方のコードは直接変更しておきます。

 >またhanaさまのコマンドを流用して下記のようにしたところ・・・

 コードは、中身だけでなく Sub ○○ 等の部分から
 載せていただくのが良いと思います。

 コマンドボタンを押した時に、TextBox1の内容で検索するのなら
 検索が終わったら、その処理は終了ですから
 ループさせる必要は無いと思いますが?

 ちなみに
    TextBox1.Value = ""
 がループの外に有るので、ずっと最初に入力された状態のままになり
 kensaku の中身が変わらず・・・無限ループに成ります。

 一つ検索が終わったら、TextBox1の値を「""」にすると
 二回目のループで kensaku = "" に成って処理が終わるとは思いますが
 必ず一回しか実行されないので、ループさせる意味は無いと思います。

 >あと少しで自分の思うような作業ができそうなので
 インプットボックスを使った物は
 何処が思うような作業と違いますか?

 (HANA) 


 hanaさま、ありがとうございます。(ほっとまっと)
 インプットボックスの場合、セルを選択すると、
 そのセルの番地がボックスに入力されてしまい、
 セルを直接編集できないということに後から気づきました。
 これはインプットボックスでやろうとした私のミスです。
 私は何百ものデータから検索した行のセルの内容を直接修正する必要がありましたので、
 セルが直接編集できないインプットボックスは少し問題があり、
 検索フォームのほうが、直接セルを編集できるので、仕事上、都合がよかったのです。

 インプットボックスを出しながら、直接セルを編集できれば、それで理想実現なのですが・・・

 もしhanaさまが、そのコマンドをご存知ならお教えください。
 それで私の理想のマクロが実現します。

 今の私のマクロは、ユーザーフォームで、テキストボックス1に検索番号入力、インターキーにより、
 次のコマンドボタンに移り、コマンドボタンを押すと、マクロ発動となっています。
 番号入力の後で、エンターキーが二回押すことが必要です。 
できれば、テキストボックス1に番号を入力し、エンターキーを一度押しただけで検索マクロを発動させたいのですが、なにか方法はございますでしょうか。

今日は一日中マクロと試行錯誤です(笑)


 確かにそうですね。

 ただ、ユーザーフォームにしても
  検索→発見→セルデータを修正
 の後再度検索したい場合は
 マウスに持ち替えてユーザーフォームを
 クリックする必要が出てくると思います。

 インプットボックスを使うマクロで
  検索値が見つからなかったらループ
  検索値が見つかったら終了
 と言うマクロにして
 ショートカットキーを設定しておいて
 再度検索したいときはマクロを再度呼び出してはどうでしょう。
 「マウスに持ち替えて」なんて作業がなくせると思いますが。

 >テキストボックス1に番号を入力し、エンターキーを一度押しただけで検索マクロを発動
 過去ログに有ると思いますので、探してみられると良いかもしれません。

 (HANA)

ありがとうございます。(ほっとまっと)

 コマンドボタンの命令を、クリックからエンターに変えることにより、
実現しました。
 明日からの仕事がはかどりそうです。
 hanaさま、いろいろとありがとうございました。
 私の問題は今解決しました。
 本当にありがとうございました。

 >できれば、テキストボックス1に番号を入力し、エンターキーを一度押しただけで
 >検索マクロを発動させたいのですが、なにか方法はございますでしょうか。

 Userformのイベントを少し弄れば出来ます。
 Userformモジュールに↓を追加してみてください。

 >---------------------

 Private flag As Boolean

 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     'CommandButton1をクリックをさせる。
     CommandButton1.Value = flag
 End Sub

 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift%)
     flag = (KeyCode = vbKeyReturn)
 End Sub

 (Abyss)

コメント返信:

[ 一覧(最新更新順) ]


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