- ベストアンサー
EXCEL 検索時の設定
EXCEL2003を使用しています。 検索する時、オプションの『セル内容が完全に同一であるものを検索する』がオンになってたりオフになってたりで、わずらわしさを感じています。デフォルトでオフの設定にする方法がありましたら教えて下さい。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >検索文字列はセルの文字列と一致しているものではなく 本来、こういう無料掲示板では、ここまで長く伸ばして、後だしの要求はしないほうがよいです。後で、内容を変えられると、書いてきたことが無意味になってしまいます。ここの掲示板は、また、質問者のリピーターも2割程度しかありません。 マクロは、勢いで書くものですから、間をあけられるのが一番つらいです。一旦、締めて、改めて質問されるほうが、まだ書きやすいです。(気が乗ればでずが) 私は、ある程度マクロが分かるつもりの人には、回答はしないようにはしているのですが、今回、思うことがあったので書きました。それは、DataObject オブジェクトでエラーが発生する原因を防ぐために考えてみました。「ある程度分かるつもりの人」が、一番、トラブルや評価がされないことが多いです。 今回、二度目のご質問になっていると思いますが、今後質問される時は、回答者を振り回さないようにしてください。 >少しこちらの作業を説明させて頂くと、検索文字列はセルの文字列と一致しているものではなく、他シートや他ブックのセル内に数行にわたって入力された文字列の中の数文字で、毎回探す語句は違います。 もし、ご自身で直せなければ、こういうことは、言わなければ分かりません。私の#11で書いたコードの似たようなものは、インターネット掲示板で有名な方も同様のコードを書いています。ただし、私は、誰のものを真似たものでもなく、オリジナルの工夫をしています。その程度は、ほんの少し変えれば済む問題です。 #7のコードのExcel 2003 用のものですから、それ以外を書き換えるつもりはありません。ただ、自分の中では、久々の会心の作だと思っていますが、意味が分からないとか、動かないとか言われても、何も言うことがありません。 二つのシートをまたいで検索をすると、エラーが発生することがありますが、改めて検索すれば、大丈夫です。 '------------------------------------------------------- ''Option Explicit Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long Private Const CF_TEXT As Long = 1 Dim FirstAdd As String Dim strText As Variant Dim c As Range Sub TestFind1() Dim objData As Object Dim myURange As Range Dim lastRng As Range Dim numFlg As Integer On Error GoTo ErrHandler Set myURange = ActiveSheet.UsedRange With myURange Set lastRng = .Cells(.Cells.Count) End With If c Is Nothing Then If IsClipboardFormatAvailable(CF_TEXT) <> 0 Then With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard strText = .GetText End With End If 'バイナリコードの除去 strText = WorksheetFunction.Clean(strText) If IsNumeric(strText) Then '数値の場合(数字全部) numFlg = 1 Else '文字の場合(文字の一部) numFlg = 2 End If '全半角のスペースの除去 ' Do ' strText = Replace(strText, Space(1), "", , , 1) ' Loop Until InStr(1, strText, Space(1), 1) = 0 Set c = myURange.Find( _ What:=strText, _ After:=lastRng, _ LookIn:=xlValues, _ LookAt:=numFlg, _ MatchCase:=False, _ SearchOrder:=xlByRows, _ MatchByte:=False) If Not c Is Nothing Then FirstAdd = c.Address c.Select Else MsgBox strText & "は見つかりませんでした。", 48 Set c = Nothing End If Else Set c = myURange.FindNext(c) If FirstAdd = c.Address Then If MsgBox("シートの最後まで検索しました。" & vbCrLf _ & "最初に戻りますが、検索しますか?", 64 + vbYesNo) = vbNo Then strText = "" Set c = Nothing Set lastRng = Nothing Else c.Select End If End If If Not c Is Nothing Then c.Select End If End If ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & " : " & Err.Description Set lastRng = Nothing Set c = Nothing End If Set myURange = Nothing End Sub
その他の回答 (11)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #9のxls88さんが、継続的に教えてくださるようには書かれてはいますので、一旦は、こちらのコードの掲示は遠慮をさせていただきましたが、取り組むだけの時間としてのタイムリミットを過ぎたような気がしますので、DataObject 型のコードを掲示しておきます。 検索文字をセルの上に置けば、それをコピーして検索します。この場合のポイントとしては、不要なコードの除去です。なお、私は、聞かれればお教えしますが、インストラクティブな回答はしておりませんので、ご了解ください。あくまでも、自分のためのコードです。 なお、参照設定は必要ありません。 ''Option Explicit Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long Private Const CF_TEXT As Long = 1 Dim FirstAdd As String Dim strText As Variant Dim c As Range Sub TestFind1() Dim objData As Object Dim myURange As Range Dim lastRng As Range Dim numFlg As Integer On Error GoTo ErrHandler Set myURange = ActiveSheet.UsedRange If strText = "" Or c Is Nothing Then If ActiveCell.Value = "" Then ActiveSheet.Cells.Find "", , -4163, 2, , 0, 0, 0 'ダミーで、メニュー・リセット Application.CommandBars.FindControl(, 1849).Execute Exit Sub Else ActiveCell.Copy End If With myURange Set lastRng = .Cells(.Cells.Count) End With If IsClipboardFormatAvailable(CF_TEXT) <> 0 Then With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard strText = .GetText End With End If 'バイナリコードの除去 strText = WorksheetFunction.Clean(strText) If IsNumeric(strText) Then '数値の場合(数字全部) numFlg = 1 Else '文字の場合(文字の一部) numFlg = 2 End If '全半角のスペースの除去 ' Do ' strText = Replace(strText, Space(1), "", , , 1) ' Loop Until InStr(1, strText, Space(1), 1) = 0 Set c = myURange.Find( _ What:=strText, _ After:=lastRng, _ LookIn:=xlValues, _ LookAt:=numFlg, _ MatchCase:=False, _ SearchOrder:=xlByRows, _ MatchByte:=False) If Not c Is Nothing Then FirstAdd = c.Address c.Select Else MsgBox strText & "は見つかりませんでした。", 48 End If Else Set c = myURange.FindNext(c) If FirstAdd = c.Address Then If MsgBox("シートの最後まで検索しました。" & vbCrLf _ & "最初に戻りますが、検索しますか?", 64 + vbYesNo) = vbNo Then strText = "" Set c = Nothing Else c.Select End If End If If Not c Is Nothing Then c.Select End If End If ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & " : " & Err.Description End If Set myURange = Nothing Application.CutCopyMode = False End Sub
補足
ご丁寧に有難うございます。返事が遅くなり、申し訳ありません。 少しこちらの作業を説明させて頂くと、検索文字列はセルの文字列と一致しているものではなく、他シートや他ブックのセル内に数行にわたって入力された文字列の中の数文字で、毎回探す語句は違います。ですが、選択セルと同じ文字列を探す...という事でしたら、とても便利なマクロだと思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 私のほうでも、DataObject を試してみました。 今まで、ずっと疑問に思っていたのですが、今回、改めて調べてみました。DataObject 側のClipBoard は、Text しか扱えないはずですが、一般的にClipBoard 側は、Text 以外のものも入るので、それを、そのまま、DataObject で扱うと、場合によっては、実行時エラーを出すことがあります。どうやら、そのための防護策を、作らないといけないようです。 例: Private Declare Function IsClipboardFormatAvailable Lib "user32" ( ByVal wFormat As Long) As Long If IsClipboardFormatAvailable(1&) <>0 Then ' ----実行---- End If それと、String 型の変数の範囲は、たぶん、Chr(0) 以上だと思うのですが、しかし、それをそのまま使ってしまうと、Find メソッドで、その見えない文字を含めて探すようです。Range オブジェクトから、Value 値を取る分には、問題はないのですが、ClipBoard 側から取ると、どうやら、Find メソッドには、可視の文字以下のキャラクタも入ってしまうようです。こちらは、実行時エラーは発生しませんが、検索しても見つからないというときがあるようです。それらも、Rangeオブジェクトをコピーした後を考えて、対策をしないといけないようです。 OSは、関係しているかもしれませんが、ExcelのVersion 固有の問題でもなさそうです。 なかなか、難しいものですね。
補足
何度も有難うございます。 ちょっと話が難しくなってしまって焦っていますが、VBAのお話ですよね?^^;
- xls88
- ベストアンサー率56% (669/1189)
>回答番号:No.6 この回答への補足 こんな感じでどうでしょうか。 Sub test4() Dim TempObject As MSForms.DataObject Static f As Range Static ftxt As String Static firstAddress As String Set TempObject = New MSForms.DataObject With TempObject .GetFromClipboard If f Is Nothing Or ftxt <> .GetText Then If ftxt <> .GetText Then ftxt = .GetText End If Set f = Cells.Find(What:=ftxt, LookIn:=xlValues, _ MatchCase:=False, LookAt:=xlPart, MatchByte:=False) If f Is Nothing Then MsgBox "Not Found!", vbExclamation Exit Sub End If firstAddress = f.Address Else Set f = Cells.FindNext(f) If firstAddress = f.Address Then MsgBox "Work Ended!" Set f = Nothing firstAddress = "" End If End If End With If Not f Is Nothing Then MsgBox f.Address Set TempObject = Nothing End Sub >MsgBoxで検索対象セルのアドレスを出すのではなく、 >そのセルにジャンプして欲しいのですが; >ショートカットキーを押す度に次の検索対象セルに次々飛んでいき、 >最後に『シートの最後まで検索しました。 >最初に戻って検索を続けますか?』というMsgBoxが出てループする 上記については、ufufueheheさんご自身の手でやってみてください。 プログラミングの楽しさを味わっていただきたいと思います。 ジャンプするのは、Application.Goto メソッドを使えば良いかも知れません。 上手く出来ない場合は、補足していただければアドバイスさせていただきます。 その際には、試されたコードを合わせて提示してください。
補足
何度も有難うございます。 返事が遅くなり、本当に申し訳ありません。 セル番地を表示させる必要はまったくないので、このマクロは残念ですが使えません。 少し、自分でもいじってみたのですが、やはり難しいですね^^; VBAは、簡単なものしか作ったことがないのですが、思い通りに動いた時は確かに快感だと思います。ですが、今はあまり時間が取れないので、#2のVBAを使わせていただこうかと考えています。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >アドビのPDFMAKER(拡張子メモるの忘れましたが、 PDFMAKER.xla だと思いますが、予想も付きませんでした。おそらく、これが原因です。XLSTARTフォルダで、Excelでは、そこには、xla はいけないはずです。アドビ側は、そういうようには考えてはないとは思いますが、トラブルの原因になります。(そうかなって思う人もいますが、XLSTART は、PERSONAL.XLS 以外に入れるのは基本的に良くないです。) Windows XP: C:\Documents and Settings\[User ID]\Application Data\Microsoft\AddIns\ ここに入れればよいのですが、ただ、一度、Excelのツール--アドインのところで、登録しなおさないといけません。登録しなおすとは言っても、アドインを開けて、[参照] で、ファイルを指定してあげれば、後は、Excel側で、前のものの処理とか聞いてくるかもしれませんので、その言うとおりにすればよいです。アドインは、アドインの場所に入れるというのが良いです。 >Excel11.xlbというのが、「メニューファイル(xlb)」なのでしょうか? その通りです。Excelのファイルの構造上の問題で、設定値が入り込むといったほうが良いかもしれません。どうやら、こちらは、そのままで良いと思います。 また、Excel11.xlbファイルは、XLSTART の上位フォルダにあるものです。ついでに、Excelが健康なときに、これを、バックアップを取っておいたほうがよいです。Excelが、調子が悪くなった時に、このファイルを入れ替えてあげます。ついでに、WordのNormal.Dot ファイルも、バックアップを取っておくと、何かの時に役に立ちます。 #7のマクロは、 きちんと、標準モジュールに二つのマクロを登録したら、 当面は、ワークシート上で、Alt + F8 --> SearchExeTest で呼び出しいただければ分かるはずです。 ただの、「検索と置換のダイアログ」が、デフォルト状態で立ち上がるだけのものですが、クリップボードに文字が入っていれば、検索ボックスの中に貼り付けされます。 もし、気に入れば、コマンドボタンをインスタンスに入れて、組み込む方法を教えます。ただし、現行では、Excel 2003 のみになってしまうと思います。Excel 2007 でも、書き換えれば動くのですが、呼び出しの部分を調べていません。 なお、Function GetClipData()側は、途中で終わらせないようにしてください。ClipBoard がオープンしたままになってしまいますので、必ず、最後の、CloseClipboard で、終わらせてください。開いたままでしたら、別途、CloseClipboard だけのマクロを走らせれば、閉じます。
補足
有難うございます。 返事が遅くなり、大変申し訳ありませんでした。 XLSTARTに入っていたのは確かにPDFMAKER.xlaであり、教えて頂いた通りにアドインフォルダに移して様子を見たのですが、やはり現象が現れてしまいます。 #7のマクロですが、自宅で検証したところ、何も動かず、エラーメッセージも出ません...?
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 省エネの時代には、時代遅れのコードですが、久々に、こんなコードを作ってみました。#4で、これに触れようとは思ったのですが、出来る自信もありませんので、触れませんでした。 ふたつの標準モジュールに、それぞれ入れてください。ひとつにすると、メインテナンスがしにくいからです。本来は、これをメニューのコマンドボタンをインスタンスとして組み込むか、イベントにしてあげるのがよいと思います。どちらかというと、前者が優れています。 SearchExeTest をコマンドボタンなどに組み込めばよいです。 例: Call SearchExeTest '---------------------------------------------------- 'モジュールの最上位に入れる '検索と置換のダイアログボックスに、文字を送るマクロ Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const WM_PASTE As Long = &H302 '----実行--- Sub SearchExeTest() Dim hwnd As Long Dim hWnd_ As Long Dim msg As String Dim i As Long If Val(Application.Version) > 10 And Val(Application.Version) < 12 Then 'Excel 2002+2003 のみ ActiveSheet.Cells.Find "", , -4163, 2, , 0, 0, 0 'ダミーで、メニュー・リセット Application.CommandBars.FindControl(, 1849).Execute End If msg = GetClipData() If Len(msg) = 0 Then Exit Sub hwnd = FindWindowEx(0&, 0&, "bosa_sdm_XL9", "検索と置換") hWnd_ = FindWindowEx(hwnd, 0&, "EDTBX", vbNullString) msg = Trim(msg) If Len(msg) < 256 Then Call SendMessage(hWnd_, WM_PASTE, 0&, vbNullString) End If End Sub '------------------------------------------------------- 'モジュールの最上位に入れる 'クリップボードから文字を取得する(別のモジュールに入れてください) Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long Private Declare Function EmptyClipboard Lib "user32" () As Long Private Declare Function CloseClipboard Lib "user32" () As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Private Const CF_TEXT As Long = 1 Public Function GetClipData() As String Dim hMem As Long Dim p As Long Dim RetVal As Long Const MAXSIZE = 4194304 '2^22 On Error GoTo ErrHandler If OpenClipboard(ByVal 0&) Then hMem = GetClipboardData(CF_TEXT) If hMem Then p = GlobalLock(hMem) If Not IsNull(p) Then GetClipData = Space$(MAXSIZE) RetVal = lstrcpy(GetClipData, p) RetVal = GlobalUnlock(hMem) GetClipData = Mid(GetClipData, 1, InStr(1, GetClipData, Chr$(0), 0) - 1) Else Err.Raise 51 End If End If ErrHandler: CloseClipboard End If End Function 参考にしたところ http://hp.vector.co.jp/authors/VA024411/vbtips03.html テキストボックス
補足
何度もご回答、有難うございます。 済みません、せっかく組んで下さったのにコードが難しくて、どういう動きをするのか判りません(汗) どういうタイミングで実行すれば良いのでしょうか?
- xls88
- ベストアンサー率56% (669/1189)
>回答番号:No.2 この回答への補足 参照設定されていないのかもしれません。 確か、Microsoft Forms2.0 Object Libraryだったと思います。 下記を参考に設定してみてください。 クリップボードとデータのやりとりをする http://www.moug.net/tech/exvba/0150091.htm マクロで参照設定を操作する http://officetanaka.net/excel/vba/tips/tips100.htm >もし検索文字列をコピー後、 >ショートカットキーを押しただけで検索対象に行きつけたとしたら 検索ダイアログを持ち出す必要は無いですね。 Sub test3() Dim TempObject As MSForms.DataObject Dim f As Range Dim firstAddress As String Set TempObject = New MSForms.DataObject With TempObject .GetFromClipboard Set f = Cells.Find(What:=.GetText, LookIn:=xlValues, _ MatchCase:=False, LookAt:=xlPart, MatchByte:=False) If f Is Nothing Then MsgBox "Not Found!", vbExclamation Exit Sub End If firstAddress = f.Address Do MsgBox f.Address Set f = Cells.FindNext(f) Loop Until f.Address = firstAddress End With Set TempObject = Nothing End Sub
補足
何度もご回答、本当に有難うございます。 参照設定、やっと理解できまして(汗)test2もしっかり動くようになりましたv ですが、MsgBoxで検索対象セルのアドレスを出すのではなく、そのセルにジャンプして欲しいのですが; ショートカットキーを押す度に次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループする…というのは無理(もしくは大変)でしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
私も「セルの内容が・・」にチェックを入れて、保存してみましたが、新たに開くと、「セルの内容が・・」はOffで出てきました。 この設定状態はエクセルファイルの設定としてファイル保存されないのではないですか。保存する必要がないとおもいますし。(いつも何か決まった課題で、全部一致の操作を多数回する人には毎回設定ガ必要で気の毒だが。) ブックを閉じるまでに、他語句で検索するとか別シートなどを検索する場合は、閉じるまでは、もちろんその後は、直前のオプションが保存されるようです。 色んな場合とかの関連がわからないから難しいわけで、本当は1例ぐらいでは何もいえませんが、(質問の情況に疑問が湧き)1例として参考にして、見直しに役立ててください。
補足
有難うございます。皆様に色々アドバイスを頂き、もしかしてアドインファイルのせい?という気もして来ました。パスワードがかかっていて、ファイルの中を勝手に見ることはできないのですが、もしそうなら、上にかけあって、パスワードを教えてもらおうかとも考えています。 「セルの内容が・・」が毎回オンになっているならともかく、バラバラなので、いちいちオプション押してオンオフ確認して…という状況でしたので; #2さんのVBAが導入できれば問題解決ですが、それとは別に、なぜこうなるのか?はやはり知りたいと思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >オンにした事もないのに、Excel立ち上げと検索を繰り返していくうちに、時々勝手にオン状態になっています。 やはり、そうだったのですね。ちょっと質問がヘンだなって思って読んでいました。 Excel 2003 + Win XP の設定でお話させていただきますが、 通常、メニューファイル C:\Documents and Settings\[User ID]\Application Data\Microsoft\Excel\Excel11.xlb これを、バックアップを取ってから、削除するといいます。 しかし、 C:\Documents and Settings\[User ID]\Application Data\Microsoft\Excel\XLSTART\PERSONAL.xls こちらを、バックアップを取ってから、削除して直ることがあります。 ただし、設定されたメニューがリセットされてしまいます。 こちらの「個人用マクロブック」のファイルは、一般のxlsファイルですから、中身は取り出すことができます。 # C:\Documents and Settings\[User ID]\Application Data\Microsoft\Excel\XLSTART\ ここの中に異物のファイルが、仮にテキストファイルでも入っていると調子がおかしくなるようですね。 PERSONAL.xls こちらから先に試してみたほうがよいかもしれません。 それで、原因ですが、ファイルの中に設定が残ってしまうことがあるようですね。一応、この経験はしているのですが、人それぞれに事情が違うようです。
お礼
済みません、会社ではあまり時間が取れなくて、Excel11.xlbの検証は無理でした。とりあえず「XLSTART」の中身だけ確認しましたが、アドビのPDFMAKER(拡張子メモるの忘れましたが、Acrobatがインストールされてるので、その関係だと思います)が入ってるだけでした。
補足
重ねてのご回答、有難うございます。 Excel11.xlbというのが、「メニューファイル(xlb)」なのでしょうか? レスポンス遅くて申し訳ないですが、明日会社で確認してみます。 ただ、多分ですが、私がマクロを書き込むまでPERSONAL.xlsは存在してなかったような気がします… アドインとして、3種類ほどのVBA用のファイルが同時に立ち上がる設定がされているようなので、もしかしたらそのどれかに支障があるのかも?
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 マクロは出来上がっているようですね。 少し、割り込ませていただくと、検索ダイアログは、デフォルトで、オフになっているはすです。しかし、Excel を起動したときに、その設定が残っているという意味でしょうか。もし、そうなら、たぶん、メニューファイル(xlb)が、Read Only になっているか、トラブルが発生しているように思います。 しかし、検索するたびに、デフォルトのオフにするということですと、マクロとは言っても、まったく種類の違うものです。Excel 2002 ~2003 専用になると思いますが、編集メニューのコマンドボタンに、Class インスタンスを、設けてあげなくてはなりません。 実際の検索に対しては、#2さんのコードの部分の、accDoDefaultAction メソッドなら、デフォルトにはなるはずです。
補足
有難うございます。 > 検索ダイアログは、デフォルトで、オフに なっていません;(ホントにバラバラです) しかも、オンにした事もないのに、Excel立ち上げと検索を繰り返していくうちに、時々勝手にオン状態になっています。トラブル発生という事でしたら、どうすれば直りますか?
- xls88
- ベストアンサー率56% (669/1189)
Sub test2() Dim TempObject As MSForms.DataObject Set TempObject = New MSForms.DataObject With TempObject .GetFromClipboard ActiveCell.Find What:=.GetText, LookIn:=xlValues, _ MatchCase:=False, LookAt:=xlPart, MatchByte:=False End With Excel.Application.CommandBars.FindControl _ (msoControlButton, 1849).accDoDefaultAction Set TempObject = Nothing End Sub
補足
有難うございます。とても早く回答して下さったのに、お礼が遅くなって申し訳ありません。 会社であまり時間が取れないため、帰宅してから検証させて頂いたのですが、『コンパイルエラー:ユーザ定義型は設定されていません』と出てしまいます。会社のPCはEXCEL2003ですが、自宅のPCは2002なので、そのせいでしょうか?明日、会社でもう一度やってみます。 エクセルの検索は頻繁に行わなければならない仕事なので、もし検索文字列をコピー後、ショートカットキーを押しただけで検索対象に行きつけたとしたら、ものすごい感動です(笑)
- 1
- 2
補足
有難うございます。今回のVBAは無事動き、もしこんなVBAがあったらとても助かると思っていたものです。感謝いたします。 間を空けてしまった事、誠に申し訳ございません。回答者様を振り回すつもりは毛頭なかったのですが、説明不足のため、結果的にそうなってしまった事をお詫び致します。 正直言って、話がどんどん難しくなってしまったのと、残業続きで疲れてしまった事、私の第一希望は『検索オプションの「セル内容が完全に同一であるものを検索する」をデフォルトでオフにする事』なので、PDFMAKER.xlaの場所を移動する事で解決するかもという思い、折角作って頂いたのにコードが上手く動かない事をどうお伝えすれば良いのかと悩んでいました。それと、イメージしていたのは記録マクロで取得できる3行程のコードの検索文字列に当たる部分に「クリップボードの内容」を代入するという単純なものだったので(実行するたびに次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループ…というのは手作業で検索した時の動作なので、そんなに難しいと思わなかった)それじゃ駄目なのかな…と模索して、先ほど漸くそれっぽいものが出来ました。とはいえネットで探し当てたコードを代入しただけなので、エラーに対する処理がいまいちですが。でもお陰で、#10でおっしゃっていた事が漸く理解できました。お恥ずかしいですが、セルコピーで検索できるという事を今回初めて知りました。なのでなぜRangeオブジェクトのコピーというコードが出てくるのか理解できなかったのですが、エラー時の処理の事まで考えて下さったのですね。コピー対象が何であれ、取り出すのはテキストなのだから…と考えていたのですが、ホームページ等から文字列をコピーする事もありえるため、やはり私の拙いマクロでは無理があるようです。作って頂いたコードを使わせて頂く事にします。重ねて、有難うございました。