こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのマクロについて

以前、こちらのマクロで

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Range("a3:ba28").Replace What:="=*!", Replacement:=Target.Value, LookAt:=xlPart
Application.EnableEvents = True
End Sub

指定した範囲を(A1)セルに入力した値に置換するマクロを教えていただいたんですが、現在,、これを使ってsheet1の指定範囲内にある(=あ!$AR$75)などが入力してある部分のシート名を置換してデータ内容の変更を行っています。
しかし、この方法だと、シート名の文字数を指定しなくてはならなくて、自分以外の人が操作すると、エラーを出してしまうことがあり困っています。そこでchangeイベントをやめて、シート名の確認をしてからマクロの実行を行うには、どういったマクロにすればいいですか??
説明が分かりづらくすみません・・・・・・。
もし他にシートの文字数などにこだわらなくてもよい方法があれば教えてください。
よろしくお願いします。

投稿日時 - 2011-05-22 03:03:10

QNo.6754427

すぐに回答ほしいです

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

>シート名の確認をしてからマクロの実行を行う

とりあえず,こういう事ではありませんか?


private sub Worksheet_Change(Byval Target as excel.range)
 dim dam
 if target.address <> "$A$1" then exit sub
’調査する
 on error goto errhandle
 dam = worksheets(target.value).range("A1").value
 on error goto 0
’置換する
 application.enableevents = false
 range("A3:BA28").replace what:="=*!", replacement:="='" & target.value & "'!", lookat:=xlpart
 application.enableevents = true
 exit sub
’作業を中断し警告する
errhandle:
 msgbox "'" & target.value & "'というシートはありません。" & vblf & "確認し再入力してください"
end sub

A1セルには「シート名だけを」記入して貰うようにします。




それとも
>シート名の文字数を指定しなくてはならなくて

「シートの文字数を指定する」とは,もうちょい具体的にどういう事ですか?
どういった記入だったら(どういう理由で)ダメで,どういう記入なら(どういう理由で)OKなのでしょうか。

投稿日時 - 2011-05-22 03:32:36

お礼

 お礼が遅れてすみません。
分かりづらい説明にこんなにすばらしい回答ありがとうございます。
さっそく使ってみましたが、自分の予定以上のものができました。
本当にありがとうございました。

投稿日時 - 2011-05-22 05:55:20

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問