Discussion:
イベントプロシージャの記述方法
(too old to reply)
unknown
2010-03-22 14:36:02 UTC
Permalink
通常のマクロで作動しているものを、セルの変更があった時に実行させるように
したいと思っています。
対象のシートモジュール内で、[Worksheet]-[Change]を選択して、自動的に
表示されるプロシージャに組み込みたいのですが、上手くいきません。

下記のマクロの最初と最後の1行を削除してもダメなので、いろいろ試してみた
のですが、ファイルがエラーで閉じられてしまいました。

方法を教えてください。 おねがいします。
________________________________________________________________

Sub 西暦への変換()

Dim ret As Date
Dim g As String
Dim y As Byte, m As Byte, d As Byte

g = Range("C5")
y = Range("DH3")
m = Range("DH5")
d = Range("EE11")

ret = CDate(g & y & "年" & m & "月" & d & "日")

Range("ED3") = Year(ret)

End Sub

(このマクロも以前作ったものを、利用してあるのでちょっとフシギかもしれません。
 今回ほしいのは、和暦から西暦への”年”だけなのですが、CDateに替わる
 ものを知らないので…。)
KMiswa
2010-03-23 01:43:53 UTC
Permalink
対象のシートモジュール に次のように記述します。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then '変更セルを指定
'処理内容を記述
End If
End Sub

これでC5セルの内容が変更されたときに処理が行われます。
Post by unknown
通常のマクロで作動しているものを、セルの変更があった時に実行させるように
したいと思っています。
対象のシートモジュール内で、[Worksheet]-[Change]を選択して、自動的に
表示されるプロシージャに組み込みたいのですが、上手くいきません。
下記のマクロの最初と最後の1行を削除してもダメなので、いろいろ試してみた
のですが、ファイルがエラーで閉じられてしまいました。
方法を教えてください。 おねがいします。
________________________________________________________________
unknown
2010-03-23 13:37:01 UTC
Permalink
ご回答ありがとうございます。

教えていただいたとおり、変更セルの指定をした後、処理を記述したのですが、
セルへの書き込み [Range("ED3") = Year(ret) ] のところで "実行時エラー
1004" が出てしまいました。

"Private sub"が自動的に表示されるので、元のマクロの1行目をはずし
ましたが、それがやっぱり間違っているような気がします。
でも、それをどうしたらいいのかが今のところわかりません…。
T. Sugita
2010-03-23 15:06:07 UTC
Permalink
$B%;%k$X$N=q$-9~$_(B [Range("ED3") = Year(ret) ] $B$N$H$3$m$G(B "$B<B9T;~%(%i!<(B
1004" $B$,=P$F$7$^$$$^$7$?!#(B
$BJQ99$5$l$?<B:]$N%3!<%I$***@_Dj$N>uBV$r8+$F$_$J$$$H3N$+$J$3$H$O(B
$B8@$($J$$$G$9$,!"%;%k(B ED3 $B$KJ]8n$,$+$+$C$F$$$k$H!"F1$8%(%i!<$G(B
$B%"%W%j%1!<%7%g%s$NDj5A$^$?$O%*%V%8%'%/%HDj5A$N%(%i!<$G$9(B
$B$HI=<($5$l$^$9!#(B

$B$b$7(B
$B%9%?%C%/NN0h$,ITB-$7$F$$$^$9!#(B
$B$H=P$F$$$k$h$&$@$H!"8m$C$?=q$-J}$G$I$3$+$G<B9T=g$,%k!<%W$7$F(B
$B$$$k2DG=@-$,$"$j$^$9!#(B
($B%9%?%C%/ITB-$ODL>o(B 28 $B$@$H;W$$$^$9$,!":#2s$N%1!<%9$G(B
$B$*$+$7$J5-=R$K$7$F(B EXCEL2000 $B$G%F%9%H$7$?$H$3$m!"(B
1004 $B$,=P$F$$$^$7$?(B)
--
$B?yED(B
nws-***@bp.iij4u.or.jp
KMiswa
2010-03-24 00:31:05 UTC
Permalink
前回のレスでは Private Sub Worksheet_Change の使い方だけを説明
しましたが、Excel2002で マクロを作ってみました。
目的は C5 に和暦年号が入力(変更)された際 ED3 に西暦年号を
表示する と理解しました。
そうなら ret = CDate(g & y & "年" ・・・・・ は変な感じがします。
元号が平成(H)なら +1988 昭和(S)なら +1925 大正(T)なら +1911
にすれば良いと思います。
平成のみで年号の数字として入力するなら
つぎで良いと思います

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then
Range("ED3").Value = Target.Value + 1988
End If
End Sub

C5に 23 と入力すれば ED3 に 2011 と表示されます。
Post by unknown
ご回答ありがとうございます。
教えていただいたとおり、変更セルの指定をした後、処理を記述したのですが、
セルへの書き込み [Range("ED3") = Year(ret) ] のところで "実行時エラー
1004" が出てしまいました。
"Private sub"が自動的に表示されるので、元のマクロの1行目をはずし
ましたが、それがやっぱり間違っているような気がします。
でも、それをどうしたらいいのかが今のところわかりません…。
unknown
2010-03-24 13:55:01 UTC
Permalink
書き込み先のセルの保護のロックをはずしたら、できました!

以前も同じ経験をしていたのに…、初めてのイベントプロッシージャへの挑戦で
複雑に考えすぎていたのかもしれません。
でも、元のマクロのSubの代わりに"Private Sub...(ByVal Target As Range) "で
どうしてOKなのかが、理屈としてまだ理解しきれていないのですが。
Post by KMiswa
元号が平成(H)なら +1988 昭和(S)なら +1925 大正(T)なら +1911
にすれば良いと思います。
そうですよね~。
ただ、将来的に年号が変わった時に、VBAが使えない人でもシートに新しい年号を
入力すれば対応できるかなぁと考えました。
新しい年号をExcelが認識するのかは、わかりませんが。
でも、KMisawaさんに教えていただいた方法は、全く頭にありませんでした。
目からウロコです。

ありがとうございました。

Loading...