• ベストアンサー

EXCEL 検索時の設定

EXCEL2003を使用しています。 検索する時、オプションの『セル内容が完全に同一であるものを検索する』がオンになってたりオフになってたりで、わずらわしさを感じています。デフォルトでオフの設定にする方法がありましたら教えて下さい。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

ufufuehehe
質問者

補足

有難うございます。今回のVBAは無事動き、もしこんなVBAがあったらとても助かると思っていたものです。感謝いたします。 間を空けてしまった事、誠に申し訳ございません。回答者様を振り回すつもりは毛頭なかったのですが、説明不足のため、結果的にそうなってしまった事をお詫び致します。 正直言って、話がどんどん難しくなってしまったのと、残業続きで疲れてしまった事、私の第一希望は『検索オプションの「セル内容が完全に同一であるものを検索する」をデフォルトでオフにする事』なので、PDFMAKER.xlaの場所を移動する事で解決するかもという思い、折角作って頂いたのにコードが上手く動かない事をどうお伝えすれば良いのかと悩んでいました。それと、イメージしていたのは記録マクロで取得できる3行程のコードの検索文字列に当たる部分に「クリップボードの内容」を代入するという単純なものだったので(実行するたびに次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループ…というのは手作業で検索した時の動作なので、そんなに難しいと思わなかった)それじゃ駄目なのかな…と模索して、先ほど漸くそれっぽいものが出来ました。とはいえネットで探し当てたコードを代入しただけなので、エラーに対する処理がいまいちですが。でもお陰で、#10でおっしゃっていた事が漸く理解できました。お恥ずかしいですが、セルコピーで検索できるという事を今回初めて知りました。なのでなぜRangeオブジェクトのコピーというコードが出てくるのか理解できなかったのですが、エラー時の処理の事まで考えて下さったのですね。コピー対象が何であれ、取り出すのはテキストなのだから…と考えていたのですが、ホームページ等から文字列をコピーする事もありえるため、やはり私の拙いマクロでは無理があるようです。作って頂いたコードを使わせて頂く事にします。重ねて、有難うございました。

その他の回答 (11)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.11

こんにちは。 #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

ufufuehehe
質問者

補足

ご丁寧に有難うございます。返事が遅くなり、申し訳ありません。 少しこちらの作業を説明させて頂くと、検索文字列はセルの文字列と一致しているものではなく、他シートや他ブックのセル内に数行にわたって入力された文字列の中の数文字で、毎回探す語句は違います。ですが、選択セルと同じ文字列を探す...という事でしたら、とても便利なマクロだと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんばんは。 私のほうでも、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 固有の問題でもなさそうです。 なかなか、難しいものですね。

ufufuehehe
質問者

補足

何度も有難うございます。 ちょっと話が難しくなってしまって焦っていますが、VBAのお話ですよね?^^;

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.9

>回答番号: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 メソッドを使えば良いかも知れません。 上手く出来ない場合は、補足していただければアドバイスさせていただきます。 その際には、試されたコードを合わせて提示してください。

ufufuehehe
質問者

補足

何度も有難うございます。 返事が遅くなり、本当に申し訳ありません。 セル番地を表示させる必要はまったくないので、このマクロは残念ですが使えません。 少し、自分でもいじってみたのですが、やはり難しいですね^^; VBAは、簡単なものしか作ったことがないのですが、思い通りに動いた時は確かに快感だと思います。ですが、今はあまり時間が取れないので、#2のVBAを使わせていただこうかと考えています。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんばんは。 >アドビの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 だけのマクロを走らせれば、閉じます。

ufufuehehe
質問者

補足

有難うございます。 返事が遅くなり、大変申し訳ありませんでした。 XLSTARTに入っていたのは確かにPDFMAKER.xlaであり、教えて頂いた通りにアドインフォルダに移して様子を見たのですが、やはり現象が現れてしまいます。 #7のマクロですが、自宅で検証したところ、何も動かず、エラーメッセージも出ません...?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 省エネの時代には、時代遅れのコードですが、久々に、こんなコードを作ってみました。#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 テキストボックス

ufufuehehe
質問者

補足

何度もご回答、有難うございます。 済みません、せっかく組んで下さったのにコードが難しくて、どういう動きをするのか判りません(汗) どういうタイミングで実行すれば良いのでしょうか?

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

>回答番号: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

ufufuehehe
質問者

補足

何度もご回答、本当に有難うございます。 参照設定、やっと理解できまして(汗)test2もしっかり動くようになりましたv ですが、MsgBoxで検索対象セルのアドレスを出すのではなく、そのセルにジャンプして欲しいのですが; ショートカットキーを押す度に次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループする…というのは無理(もしくは大変)でしょうか?

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

私も「セルの内容が・・」にチェックを入れて、保存してみましたが、新たに開くと、「セルの内容が・・」はOffで出てきました。 この設定状態はエクセルファイルの設定としてファイル保存されないのではないですか。保存する必要がないとおもいますし。(いつも何か決まった課題で、全部一致の操作を多数回する人には毎回設定ガ必要で気の毒だが。) ブックを閉じるまでに、他語句で検索するとか別シートなどを検索する場合は、閉じるまでは、もちろんその後は、直前のオプションが保存されるようです。 色んな場合とかの関連がわからないから難しいわけで、本当は1例ぐらいでは何もいえませんが、(質問の情況に疑問が湧き)1例として参考にして、見直しに役立ててください。

ufufuehehe
質問者

補足

有難うございます。皆様に色々アドバイスを頂き、もしかしてアドインファイルのせい?という気もして来ました。パスワードがかかっていて、ファイルの中を勝手に見ることはできないのですが、もしそうなら、上にかけあって、パスワードを教えてもらおうかとも考えています。 「セルの内容が・・」が毎回オンになっているならともかく、バラバラなので、いちいちオプション押してオンオフ確認して…という状況でしたので; #2さんのVBAが導入できれば問題解決ですが、それとは別に、なぜこうなるのか?はやはり知りたいと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >オンにした事もないのに、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 こちらから先に試してみたほうがよいかもしれません。 それで、原因ですが、ファイルの中に設定が残ってしまうことがあるようですね。一応、この経験はしているのですが、人それぞれに事情が違うようです。

ufufuehehe
質問者

お礼

済みません、会社ではあまり時間が取れなくて、Excel11.xlbの検証は無理でした。とりあえず「XLSTART」の中身だけ確認しましたが、アドビのPDFMAKER(拡張子メモるの忘れましたが、Acrobatがインストールされてるので、その関係だと思います)が入ってるだけでした。

ufufuehehe
質問者

補足

重ねてのご回答、有難うございます。 Excel11.xlbというのが、「メニューファイル(xlb)」なのでしょうか? レスポンス遅くて申し訳ないですが、明日会社で確認してみます。 ただ、多分ですが、私がマクロを書き込むまでPERSONAL.xlsは存在してなかったような気がします… アドインとして、3種類ほどのVBA用のファイルが同時に立ち上がる設定がされているようなので、もしかしたらそのどれかに支障があるのかも?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 マクロは出来上がっているようですね。 少し、割り込ませていただくと、検索ダイアログは、デフォルトで、オフになっているはすです。しかし、Excel を起動したときに、その設定が残っているという意味でしょうか。もし、そうなら、たぶん、メニューファイル(xlb)が、Read Only になっているか、トラブルが発生しているように思います。 しかし、検索するたびに、デフォルトのオフにするということですと、マクロとは言っても、まったく種類の違うものです。Excel 2002 ~2003 専用になると思いますが、編集メニューのコマンドボタンに、Class インスタンスを、設けてあげなくてはなりません。 実際の検索に対しては、#2さんのコードの部分の、accDoDefaultAction メソッドなら、デフォルトにはなるはずです。

ufufuehehe
質問者

補足

有難うございます。 > 検索ダイアログは、デフォルトで、オフに なっていません;(ホントにバラバラです) しかも、オンにした事もないのに、Excel立ち上げと検索を繰り返していくうちに、時々勝手にオン状態になっています。トラブル発生という事でしたら、どうすれば直りますか?

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

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

ufufuehehe
質問者

補足

有難うございます。とても早く回答して下さったのに、お礼が遅くなって申し訳ありません。 会社であまり時間が取れないため、帰宅してから検証させて頂いたのですが、『コンパイルエラー:ユーザ定義型は設定されていません』と出てしまいます。会社のPCはEXCEL2003ですが、自宅のPCは2002なので、そのせいでしょうか?明日、会社でもう一度やってみます。 エクセルの検索は頻繁に行わなければならない仕事なので、もし検索文字列をコピー後、ショートカットキーを押しただけで検索対象に行きつけたとしたら、ものすごい感動です(笑)

関連するQ&A

専門家に質問してみよう