No.1
- 回答日時:
>デフォルトでオフの設定にする方法がありましたら教えて下さい。
無いと思います。
VBAで、「検索」ダイアログを起動すればどうでしょうか。
Findメソッドのパラメータで、LookAt:=xlPart が
『セル内容が完全に同一であるものを検索する』がオフの設定です。
Sub test1()
ActiveCell.Find What:="検索", LookIn:=xlValues, _
MatchCase:=False, LookAt:=xlPart, MatchByte:=False
Excel.Application.CommandBars.FindControl _
(msoControlButton, 1849).accDoDefaultAction
End Sub
上記に、ショートカットキーを割り当てればよいと思います。
有難うございます。とても助かりますv
追加質問で申し訳ないのですが、
"検索"のところに『クリップボードの内容』を入れる事が出来ないでしょうか?
また、置換の時はどの辺を変えればよいでしょうか。
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
この回答への補足
有難うございます。とても早く回答して下さったのに、お礼が遅くなって申し訳ありません。
会社であまり時間が取れないため、帰宅してから検証させて頂いたのですが、『コンパイルエラー:ユーザ定義型は設定されていません』と出てしまいます。会社のPCはEXCEL2003ですが、自宅のPCは2002なので、そのせいでしょうか?明日、会社でもう一度やってみます。
エクセルの検索は頻繁に行わなければならない仕事なので、もし検索文字列をコピー後、ショートカットキーを押しただけで検索対象に行きつけたとしたら、ものすごい感動です(笑)
No.3
- 回答日時:
こんにちは。
マクロは出来上がっているようですね。
少し、割り込ませていただくと、検索ダイアログは、デフォルトで、オフになっているはすです。しかし、Excel を起動したときに、その設定が残っているという意味でしょうか。もし、そうなら、たぶん、メニューファイル(xlb)が、Read Only になっているか、トラブルが発生しているように思います。
しかし、検索するたびに、デフォルトのオフにするということですと、マクロとは言っても、まったく種類の違うものです。Excel 2002 ~2003 専用になると思いますが、編集メニューのコマンドボタンに、Class インスタンスを、設けてあげなくてはなりません。
実際の検索に対しては、#2さんのコードの部分の、accDoDefaultAction メソッドなら、デフォルトにはなるはずです。
この回答への補足
有難うございます。
> 検索ダイアログは、デフォルトで、オフに
なっていません;(ホントにバラバラです) しかも、オンにした事もないのに、Excel立ち上げと検索を繰り返していくうちに、時々勝手にオン状態になっています。トラブル発生という事でしたら、どうすれば直りますか?
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 こちらから先に試してみたほうがよいかもしれません。
それで、原因ですが、ファイルの中に設定が残ってしまうことがあるようですね。一応、この経験はしているのですが、人それぞれに事情が違うようです。
この回答への補足
重ねてのご回答、有難うございます。
Excel11.xlbというのが、「メニューファイル(xlb)」なのでしょうか?
レスポンス遅くて申し訳ないですが、明日会社で確認してみます。
ただ、多分ですが、私がマクロを書き込むまでPERSONAL.xlsは存在してなかったような気がします…
アドインとして、3種類ほどのVBA用のファイルが同時に立ち上がる設定がされているようなので、もしかしたらそのどれかに支障があるのかも?
済みません、会社ではあまり時間が取れなくて、Excel11.xlbの検証は無理でした。とりあえず「XLSTART」の中身だけ確認しましたが、アドビのPDFMAKER(拡張子メモるの忘れましたが、Acrobatがインストールされてるので、その関係だと思います)が入ってるだけでした。
No.5
- 回答日時:
私も「セルの内容が・・」にチェックを入れて、保存してみましたが、新たに開くと、「セルの内容が・・」はOffで出てきました。
この設定状態はエクセルファイルの設定としてファイル保存されないのではないですか。保存する必要がないとおもいますし。(いつも何か決まった課題で、全部一致の操作を多数回する人には毎回設定ガ必要で気の毒だが。)
ブックを閉じるまでに、他語句で検索するとか別シートなどを検索する場合は、閉じるまでは、もちろんその後は、直前のオプションが保存されるようです。
色んな場合とかの関連がわからないから難しいわけで、本当は1例ぐらいでは何もいえませんが、(質問の情況に疑問が湧き)1例として参考にして、見直しに役立ててください。
この回答への補足
有難うございます。皆様に色々アドバイスを頂き、もしかしてアドインファイルのせい?という気もして来ました。パスワードがかかっていて、ファイルの中を勝手に見ることはできないのですが、もしそうなら、上にかけあって、パスワードを教えてもらおうかとも考えています。
「セルの内容が・・」が毎回オンになっているならともかく、バラバラなので、いちいちオプション押してオンオフ確認して…という状況でしたので;
#2さんのVBAが導入できれば問題解決ですが、それとは別に、なぜこうなるのか?はやはり知りたいと思います。
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
この回答への補足
何度もご回答、本当に有難うございます。
参照設定、やっと理解できまして(汗)test2もしっかり動くようになりましたv
ですが、MsgBoxで検索対象セルのアドレスを出すのではなく、そのセルにジャンプして欲しいのですが; ショートカットキーを押す度に次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループする…というのは無理(もしくは大変)でしょうか?
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 …
テキストボックス
この回答への補足
何度もご回答、有難うございます。
済みません、せっかく組んで下さったのにコードが難しくて、どういう動きをするのか判りません(汗) どういうタイミングで実行すれば良いのでしょうか?
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 だけのマクロを走らせれば、閉じます。
この回答への補足
有難うございます。
返事が遅くなり、大変申し訳ありませんでした。
XLSTARTに入っていたのは確かにPDFMAKER.xlaであり、教えて頂いた通りにアドインフォルダに移して様子を見たのですが、やはり現象が現れてしまいます。
#7のマクロですが、自宅で検証したところ、何も動かず、エラーメッセージも出ません...?
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 メソッドを使えば良いかも知れません。
上手く出来ない場合は、補足していただければアドバイスさせていただきます。
その際には、試されたコードを合わせて提示してください。
この回答への補足
何度も有難うございます。
返事が遅くなり、本当に申し訳ありません。
セル番地を表示させる必要はまったくないので、このマクロは残念ですが使えません。
少し、自分でもいじってみたのですが、やはり難しいですね^^;
VBAは、簡単なものしか作ったことがないのですが、思い通りに動いた時は確かに快感だと思います。ですが、今はあまり時間が取れないので、#2のVBAを使わせていただこうかと考えています。
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 固有の問題でもなさそうです。
なかなか、難しいものですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iOS iPhone重いです軽くする方法あますか? iPhone8 64gb残り6gb いおs16 最新バー 4 2023/04/06 07:12
- その他(ブラウザ) Android Google でなく Bing検索すれば 何検索したかわからずデータ収集されない? 2 2023/03/10 05:25
- Windows 10 Googleサイトのサイト内検索(虫眼鏡アイコン、検索ボックス)について 1 2022/04/08 12:16
- Excel(エクセル) Excel 参照元の値を参照したい 1 2022/08/20 18:58
- iPhone(アイフォーン) iPhone WiFi をオフにしていても自動的にオンになっています 設定で永久にオフにできる? 6 2023/03/10 21:14
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) ExcelのFIND関数について 4 2023/06/06 18:10
- Windows 10 DELLのスクショのやり方 2 2022/11/02 14:40
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
Wordで差込印刷した後に別々の...
-
ExcelブックをGoogleスプレッド...
-
サブフォルダから部分一致のエ...
-
Excel csv保存 列数が異なる場...
-
エクセルファイル名に更新日時...
-
EXCEL 検索時の設定
-
【Excel VBA】ファイルを保存し...
-
vbaでボタンをクリックして上書...
-
エクセルで、フィルタかけたま...
-
VBAでマクロを使って、マクロ無...
-
エクセルのマクロで行と列の削...
-
エクセルVBAに詳しい方! マクロ...
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
VBA 最新のフォルダ取得
-
Windows10でコマンドプロンプト...
-
VBA フォルダ名に特定の文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
ExcelブックをGoogleスプレッド...
-
Wordで差込印刷した後に別々の...
-
Excel csv保存 列数が異なる場...
-
エクセルファイル名に更新日時...
-
エクセル UserForm 呼び出しで...
-
サブフォルダから部分一致のエ...
-
実行時エラー52
-
マクロ実行後、表示がおかしくなる
-
エクセルでcsvファイルを開いて...
-
VBAでマクロを使って、マクロ無...
-
複数のexcelのファイルを一括で...
-
PowerPoint 2002でファイル名を...
-
エクセルのマクロで行と列の削...
-
大量のCSVファイルをExcel形式...
-
EXCEL 検索時の設定
-
For~Nextルーチンで最初の1回...
-
処理速度にムラがあり過ぎる
-
エクセルで、フィルタかけたま...
おすすめ情報