Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Excel 2003)
検索場所の変更
投稿日時: 17/06/09 12:09:06
投稿者: nip

現在選択範囲内の文字列の置き換え処理を行うマクロを利用しています.
下記のマクロをセル範囲選択状態で,ボタンを押して実行します.
 
Sub 置換() '選択範囲の=を'に置き換えて式を文字列にする
    Selection.Replace What:="=", Replacement:="'", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub
 
時々選択範囲以外(ブック全体)の置き換えをしてしまい
シートがぐちゃぐちゃになってしまうことがあります.
 
原因を調べると
手作業で"検索と置換"のダイアログが表示されて
オプションを開いて
検索場所がシートになっている場合は選択範囲内のみ置換
検索場所がブックになっている場合は選択範囲以外まで置換
となるようです
 
手作業でシートにしてから実行すればいいだけなのですが
うっかりすると影響が大きいので
VBAで強制的に検索場所をシートにする方法を探しています
 

回答
投稿日時: 17/06/09 17:12:05
投稿者: Suzu

こんにちは。
 
変更する方法は、ざっと調べた限り見つかりません。
逆に、「変更する方法はありません」と言う情報はあるのですがね。
 
 
「選択範囲」がどの程度の範囲か判りませんが、REPLACEメソッドではなく
SELECTION に対し、FINDメソッドを使用し、
  検索開始 検索見つかったら 文字変更、 次回以降は、FindNext にて検索を繰り返す
 
が一般的かと。
 
FINDメソッドのヘルプに用例がありませんか。

回答
投稿日時: 17/06/09 17:31:47
投稿者: kakka

こんにちわ。
 
マクロ実行前に選択状態にしておくのではなくて、Application.inputboxを使って範囲を選択すれば解決しませんか?
 
こちらのページが詳しいのでご参考にしてください。
http://officetanaka.net/excel/vba/tips/tips37.htm

回答
投稿日時: 17/06/09 17:59:46
投稿者: Abyss2

「検索と置換」ダイアログの検索場所が「ブック」になっている場合、
RangeのSelectionオブジェクトは範囲指定の意味が失うことですね?
 
ExcelVBAと「検索と置換」ダイアログの関係性は薄いので、
なんらかのAutomationで「VBAでの置換作業」を実施する手前で検索場所を
「ブック」から「シート」に戻す必要がありますね。
(ExcelのVBAライブラリーからの方法はないと思います)
 
以前、OfficeのIAccessbleインタフェースを利用し実装した事がありますが、
UIAutomationからの操作も可能だと思います。
 

回答
投稿日時: 17/06/10 11:13:07
投稿者: K.Hiwasa
投稿者のウェブサイトに移動

こんにちは。
Findメソッドを使用すると、検索場所が「シート」に変更されるようです。
なので、Replaceの前にReplaceと同じ条件でFindをしてやるというのはどうでしょうか?
 
こんな感じ(Findはマクロの記録で作ったので、不要な指定は省いてください)
 

Sub 置換() '選択範囲の=を'に置き換えて式を文字列にする
    Dim RNG As Range
    Set RNG = Selection.Find(What:="=", After:=ActiveCell, LookIn:=xlFormulas, _
                             LookAt:=xlPart, SearchOrder:=xlByRows, _
                             SearchDirection:=xlNext, MatchCase:=False, _
                             MatchByte:=False, SearchFormat:=False)
    Selection.Replace What:="=", Replacement:="'", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

投稿日時: 17/06/15 17:58:31
投稿者: nip

回答が遅れましてすみません.
 
K.Hiwasaさま
提示されたコードで
完全に解決しました~(゚∀゚)
 
感謝です