10代と話して驚いたこと

http://oshiete.goo.ne.jp/qa/8444285.html

↑こちらでご質問をさせていただき、置換シートA列に置換元、B列に置換後データを入れておくことで、置換が一度にできるマクロを作っていただいたのですが、
ブック全体ではなく、現在アクティブなシートだけ、置換をすることは可能でしょうか…?

いま、このマクロを実行すると、ブック全体が置換され、元の置換シートのA列や、置換できればしたくないシートもすべて置換されてしまいます。

回答を閉め切ってしまい、新規でご質問となってしまいました。
すみません、、自分でもいろいろと調べてやってみたのですが、
どうしてもよくわからず…

どうぞ、よろしくお願い致します。

● 作っていただいたマクロ ●
sub macro1()
 dim h as range
 for each h in worksheets("置換").range("A1:A" & worksheets("置換").range("A65536").end(xlup).row)
  cells.replace what:=h.value, replacement:=h.offset(0,1).value, lookat:=xlpart
 next
end sub

A 回答 (2件)

恐らくNo.3の方のご推測の様に検索/置換のオプション設定で、検索場所が「ブック」になっているのだと思います。


このオプションはVBAでは変更できません、
Excel上で[Ctrl]+[F]を押して「検索と置換」のダイアログを出してみて下さい。
そのダイアログ上の検索場所が「ブック」になっていたら「シート」に戻して終了してください。
#通常は「シート」です。

この状態なら元のマクロでアクティブなシートだけに置換が行われるはずです。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます!
とてもわかりやすく、大変助かりました!!

お礼日時:2014/02/21 11:03

こんにちは。



なにぶんにも、かなり、VBAがご無沙汰なので、間違っいたらすみません。

答えは、おそらく、置換ダイアログのオプションの中の[検索場所]の部分が「ブック」で、
「シート」になっていないのだと思います。マクロを実行する前に、調べてもらう必要があります。
残念なことに、Application.Dialogsが、手元のExcel 2010では利かないようです。
それが動くなら、オブション指定が出来た記憶があります。

私の力では、マクロの範囲内では解決しませんが、思いつく方法としては、「リソース・ハッカー」などの、ハック・ツールで、置換ダイヤログの中を検査し、その得た情報から、Win32 APIで信号を送る方法があると思います。まだベテランの方が見ていれば解決するような気がします。

一応、念のために、元のマクロを手直ししてみました。
まあ、アップされたものとは、あまり代わり映えしない内容です。

'//
Sub 置換2()
'注意:置換オプションの切り替えは出来ません。
 Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
 Set wS1 = ActiveSheet
 Set wS2 = Worksheets("置換")
 
 Application.ScreenUpdating = False
 For Each c In wS2.Range("A1", wS2.Cells(Rows.Count, 1).End(xlUp))
   wS1.Cells.Replace c.Value, c.Offset(, 1).Value, 2
 Next c
 Application.ScreenUpdating = True
 Set wS1 = Nothing
 Set wS2 = Nothing
End Sub

'//
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます!
とてもわかりやすく、大変助かりました!!

お礼日時:2014/02/21 11:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報