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

解決済みの質問

Excel  関数をまたいだTargetの使用

excel2013 OS はwindows8を使用しています。

Excelのマクロで、以下のコードについて質問です。(コード内の・・・は省略の意)


Private Sub Worksheet_Change(ByVal Target As Range)

Dim ・・・・・・・
     ・
     ・

 If Target.Value = ・・・・・

   Call myfunction
End If
End Sub

Sub myfunction()

If 条件 Then
Target.Offset(0,1).Value = "aaa"
End If

End Sub

このマクロのPrivate Sub Worksheet_Change(ByVal Target As Range)を実行するとエラーが
出ます。エラーの内容は「オブジェクト変数またはwithブロック変数が設定されていません」
となり、 Target.Offset(,1).Value = "aaa" の行が黄色く表示されます。
myfuncton内で使用しているTargetが何なのかがわからないというエラーだと理解しています。
そこで私は以下の2つを試しました。
1つめはうまくいかず、2つめは何か2度手間のような感じがするのですが、正常動作する
ようです。

そこで質問なのですが、Targetをプロシージャをまたいで利用したい場合に一般的に用いら
れている手法などがあれば教えて頂きたいです。


1つめ・・Targetをプロシージャをまたいで使えるようにコードの一番上の部分
、つまり、Private Sub Worksheet_Change(ByVal Target As Range)の一行上の
部分にDim Target As Range と宣言してみました。が、これはうまくいきませんでした。

2つめ・・適当な(この場合e)変数を宣言し、プロシージャをまたいで使用する。

Dim e As Range
Private Sub Worksheet_Change(ByVal Target As Range)

Dim ・・・・・・・
     ・
     ・

 If Target.Value = ・・・・・
Set e = Target
   Call myfunction
End If
End Sub

Sub myfunction()

If 条件 Then
e.Offset(0,1).Value = "aaa"
End If

End Sub

以上何か良い方法があれば教えて頂きたいです。また不明な点があれば
ご質問ください     

投稿日時 - 2014-03-22 13:59:08

QNo.8524083

暇なときに回答ください

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

Priavateで宣言する必要はありません。
myfunctionを呼び出すときに引数付にすればよいです。

以下の様にすればよろしいかと思います。


Private Sub Worksheet_Change(ByVal Target As Range)

Dim ・・・・・・・
     ・
     ・

 If Target.Value = ・・・・・

Call myfunction(Target)
End If
End Sub

Sub myfunction(Target As Range)

If 条件 Then
Target.Offset(0, 1).Value = "aaa"
End If

End Sub

投稿日時 - 2014-03-22 14:05:02

お礼

ありがとうございました。このような方法があったのですね!初めて知りました。今後の役にも立ちそうです。

投稿日時 - 2014-03-23 09:26:57

ANo.1

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

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

回答(1)

あなたにオススメの質問