EXCEL VBAでマクロの最後でFind関数のLookAtの設定を変更する方法

このQ&Aのポイント
  • EXCEL VBAでマクロの最後に、Find関数のLookAtの設定を変更する方法について教えてください。
  • 通常はセル内容が完全に同一であるものを検索する設定を外して使用していますが、マクロの後にはこの設定が引き継がれてしまいます。
  • よりスマートな方法であいまい検索と完全一致検索を切り替える方法があれば教えてください。
回答を見る
  • ベストアンサー

EXCEL VBAでマクロの最後でFind関数のLookAtの設定を変更したい。

EXCEL VBAでマクロの最後でFind関数のLookAtの設定を変更したい。 EXCELの検索機能において、通常は、オプションの「セル内容が完全に同一であるものを検索する」のチェックを外して使用しています。 あるマクロにおいて、Find関数のLookAtの値を「xlWhole」(完全一致)で使用しています。 この「LookAt」の値は、通常の手動での検索にも設定が引き継がれるため、このマクロの後に、検索機能を使用するとオプションの「セル内容が完全に同一であるものを検索する」はチェックされた状態になっています。 つまり、通常時はあいまい検索、マクロ時は完全一致検索を行いたいと思っており、マクロの最後で、あいまい検索に設定を変更しておきたいのですが、そういった指定は可能なのでしょうか。 ごり押しですが、最後に、あいまい検索で適当な検索を行っておくという事も考えましたが、もう少しスマートな方法があるのか、ご存知の方がいらっしゃればと思い質問させていただきました。 よろしくお願いします。

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

  • ベストアンサー
  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.2

あぁ、そういうことでしたか^^; 理解力が乏しくて申し訳ないです。 うろ覚えですが、Findメソッドは自身の処理が走る際に自動設定し保持しますので、再度Findメソッドを使ってやるしか方法はないかと思います。(本当にうろ覚えです^^;) 確かにスマートな形ではないので、それならばLike演算子を使ってやるのはいかがでしょう? Sub Find() Dim c As Object   For Each c In Worksheets(1).Range("A1:A10")     If c.Value Like "検索文字列" Then       【処理】     End If   Next c End Sub みたいにしてやればお望みの処理が実現すると思いますが・・。 それともLike演算子ではダメな理由でもあるのでしょうか?

BENGAL
質問者

お礼

ありがとうございます! 遅くなりまして申し訳ございません。 Likeを使用する方法で、解決いたしました。 参考になります。 ありがとうございました!

その他の回答 (3)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

こうゆう事? 設定変更だけしかしないと思うんだけど Sub 完全一致() Cells.Find lookat:=xlWhole End Sub Sub 曖昧() Cells.Find lookat:=xlPart End Sub

BENGAL
質問者

お礼

ありがとうございます。 遅くなりまして申し訳ございません。 教えて頂いた方法ですと、 「引数の数が一致しません」とエラーとなってしまいました。 【環境】 Windows Vista Excel2007

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.3

補足ですが、#2はFindメソッドでいう「完全一致」と考えて良いです。 「If c.Value Like "検索文字列" Then」 の「検索文字列」部分前後にアスタリスク(「*」)をつけて「*検索文字列*」としてやれば、「検索文字列を含むセル」がtrueで返り、Findメソッドでいう「曖昧検索」の役割を果たします。

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

単にマクロがが走る際のロジックの最初の行辺りで Set hoge = .Find(What:="", lookat:=xlWhole) マクロの最後の方で Set hoge = .Find(What:="", lookat:=xlPart) で良い気がしますが・・・。 そういうことではないんですかね?

BENGAL
質問者

お礼

ありがとうございます! やはり、最後にあいまい検索を実行しておくって事になりますよね。 実際には、設定を変更するためだけに検索を実行してしまう事になるので、処理は行わず、設定の変更だけで、変えれるものなのかどうかって所で、悩んでおりました。

関連するQ&A

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • エクセル FIND関数で

    FIND関数でA1のセル中の”t”とゆう字を検索する数式をつくっておき A1に”santa”と入力しエンター(確定)を押すと ”4”という答えが出るとおもいますが、エンターキーを押す前に答えがでてほしいのです。 tを押した瞬間に4が出てほしいのです。 マクロを使用せずに上記のことができますでしょうか。 よろしくお願いします。

  • VBA★findを使って見つけたセルの値を取得

    AA="タナカ" Selection.Find(What:=AA, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate 自動マクロでコレをつくりました。 タナカを見つけてその隣の変数を取得するというものを作りたいと思っています。 関数で言うとVlookupでやるものをマクロ化しようとしています。 検索して見つかったセルの右隣のセルの値を取得するにはどうしたらいいですか?

  • エクセルのFIND関数について

    エクセルの関数でFINDというのがあります。文字ストリングの中に 指定する文字列があれば、最初から何番目かを返す関数です。 質問は、もし見つからない時は式をいれたセルに「#VALUE!」 と表示されますが、IF文の中で使うような時、何と言う値で聞けば良いのでしょうか。””やNULLやNOTHINGやFALSEや-1でやって見ましたが上手く行きません。 =IF(FIND(”市”、A1、1)=○○、A1、” ”)の○○は何でしょう。(A1セルの文字列に「市」がなければA1を持ってきて、あれば ブランクとする.)

  • エクセルマクロのVBAでINDEX関数を使う。

    エクセルマクロのVBAでINDEX関数を使って値を取得しています。 値を取得したセル番地を取得したいと考えています。 ネットで調べましたが、なかなか思うような内容をヒットできません。 VBAに詳しいかた、ご教授お願い致します。

  • マクロのCells.Findについて

    エクセルマクロのCells.Findについて教えてください。 特定の文字列を含むセルを検索するときにCells.Findを使うと思うのですが、例えば、「スペル」という文字列を検索したいけれども、「ゴスペル」というような文字列は排除しながら検索できますか?「スペル」と入力されているセルと、「ゴスペル」と入力されているセルと、「スペル、ゴスペル」と入力されているセルがあったときに、「スペル」や「スペル、ゴスペル」と入力されているセルを検索したいです。 Cells.FindのWhat:=の記入中身を工夫すればできないかなと頭を悩ませていますが、Cells.Find以外の方法でも結構です。どうか宜しくお願いします。

  • 関数エラーによるエクセルマクロの処理中断

    そんなにエクセルVBAが得意じゃないです。よろしく教示くださいませ。 セルにエクセル関数を設定し、マクロを働かせて使用しています。 セルに想定外のデータが入力されると、関数エラーを起こしてしまうのですが、 このエラーが発生すると、マクロも中断になってしまいます。 関数エラーが発生しても、マクロが中断しないような、マクロ命令って あるのでしょうか。 実は、マクロで想定外データのチェックをかけてるのですが、その想定外データが入力されると、 警告は発するのですが、関数エラーが発生し、マクロが中断してしまうのです。 マクロに組み込むべき、コマンドはあるのでしょうか。

  • EXCEL VBAのFind について

    VBAで、特定の文字が入っているセル位置(結合セル)を取得したく、 シートのコード記述で --- Private Sub Worksheet_Change(ByVal Target As Range) Dim w_CelObj As Object Set w_CelObj = ActiveSheet.Cells.Find(What:="あああ", LookAt:=xlWhole, MatchByte:=False) MsgBox w_CelObj.Row MsgBox Cells.Find(What:="いいい").Row End Sub ----- と記述し、"aa"も"bb"もどちらの方法でも取得できました。 ですが、これを別のEXCELブック(既にシートがたくさんあり、コードもびっしり記述してあります)で同様のことを行おうとするとエラーになってしまいます。 ※新しいシートを作成し、そのシートにコードをコピーして試しました。 セルの結合を解除すると正常に取得できるのですが、結合セルだとFindされてきません。 調べてみましたが、「Cells.Find」ときちんとセル全体を指定していれば大丈夫のようで、同様の事例を検索できませんでした。 他に何を調べればよいでしょうか? ご協力よろしくお願いします。

  • エクセル マクロ FIND

    いつも回答して頂き、心から感謝しています。 FINDで特定セルを探し出し、そこを起点にコピーする領域を設定しようかなと考えています。 で、FINDの部分で早くも分からなくなったので質問します。 下記のようなマクロを記述しましたが、FINDの記述の箇所でエラーが発生してしまいます。 何が悪いのかさっぱり分からないので、どなたか教えて下さい。 エラー名:実行時エラー13       型が一致しません。 Sub 作業状態の部分を作業名別に各シートに貼り付ける() Dim b1 As Variant With Worksheets("書面") Set b1 = .Columns("B").Find("作業状態", xlValues, xlWhole, xlByColumns, xlNext) b1.Select End With End Sub

  • Excel97 マクロで検索

    Excel97を使っています。 「マクロの記録」でセルの値を検索して記録し、そのまま「マクロの実行」で実行するとうまくいくのに、コマンドボタンから呼び出すと、「実行時エラー1004:RangeクラスのFindプロパティを取得できません」と出ます。ヘルプにもないようで困っています。 どのようにしたらよいのでしょうか? 教えてください

専門家に質問してみよう