EXCELでマクロで2つの作業をしたいのですが、「コンパイルエラー 名前が適切ではありません。Worksheet_Change」とエラーメッセージが表示されます。
やりたい事は下記の通りとなります。
マクロの知識が乏しく、ご教授いただきますようお願い致します。
1.F列~I列のセルを更新すると(新規入力、削除 ※具体的には●を表示する、しないのどちらかです)、E列に更新日付が表示される。
EX.F3セルを更新するとE3セルに更新日付が表示される。F4セルを更新するとE4セルに更新日付が表示される。
2.L列~N列のセルを更新すると(新規入力、削除、更新 ※具体的には日付や文字列の入力、削除、更新です)、K列に更新日時が表示される。
EX.L3セルを更新するとK3セルに更新日付が表示される。L4セルを更新するとK4セルに更新日付が表示される。
2つ目のPrivate Sub Worksheet_Change(ByVal Target As Range)の部分の記載を変更すればよいのと思いますが、どのような記載にすればよいのか分かりません。
VBA画面では11行目のEnd Subの下に横線が自動で表示されています。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("F:I")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Row > 2 And .Value <> "" Then
With Cells(.Row, "E")
.Value = Date
.NumberFormatLocal = "yyyy/mm/dd"
End With
End If
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("L:N")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Row > 2 And .Value <> "" Then
With Cells(.Row, "K")
.Value = Date
.NumberFormatLocal = "yyyy/mm/dd"
End With
End If
End With
End Sub
No.5
- 回答日時:
こんにちは。
書いた人は、一応、VBAの分かる方のようですが……。
なお、同じ目的のイベントは、全部で大雑把に4つありますが、そんなバカなことをする人はいないのです。管理しにくくなるからです。95時代の標準モジュール・イベント、通常のシート・イベント、ワークブックイベント、残りはクラスイベントです。いずれは、クラスに淘汰されると思います。
>.Value = Date
>.NumberFormatLocal = "yyyy/mm/dd"
これは、一般的には逆ですね。たぶん、これでも問題ないだろうという所なのでしょうが、書式は先にします。
それから、書き方ですが、除外条件を最初に羅列してしまうのが良い方法です。
条件の受け入れ度の大きいほうから、順番にします。それと、なるべく同じコードは書かないというのが、原則です。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cl As Long
If Target.Count > 1 Then Exit Sub
If Target.Row < 3 Then Exit Sub
If Not Intersect(Target, Range("F:I")) Is Nothing Then
cl = 5
If Trim(Target.Value) <> "●" Then Exit Sub
ElseIf Not Intersect(Target, Range("L:N")) Is Nothing Then
cl = 11
End If
Application.EnableEvents = False '入力がイベントをコールするから
With Cells(Target.Row, cl)
.NumberFormatLocal = "yyyy/mm/dd"
.Value = Date
End With
Application.EnableEvents = True
End Sub
No.4
- 回答日時:
No.3 修正です。
(直さなくても動きますが…)「Select Case Target.Column」を「Select Case .Column」にして下さい。
No.3
- 回答日時:
簡単に言えば「Private Sub Worksheet_Change(ByVal Target As Range)」が2つあるのでエクセルがどちらを実行していいか判らないのでエラーが出ているだけです。
内部で処理を分岐させれば良いと思います。具体的には以下のような感じです。
---------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Then Exit Sub
If .Row < 2 Then Exit Sub
If .Value = "" Then Exit Sub
Select Case Target.Column
Case 6 To 9
Cells(.Row, 5).Value = Date
Cells(.Row, 5).NumberFormatLocal = "yyyy/mm/dd"
Case 12 To 14
Cells(.Row, 11).Value = Date
Cells(.Row, 11).NumberFormatLocal = "yyyy/mm/dd"
End Select
End With
End Sub
---------------------------------------------------------------------------
※ 列の指定は列記号ではなく列番号を使っています。
ご丁寧に教えていただき有難うございます。
続けて教えていただきたいのですが、後の方の処理ですが、
Case 12 To 14
Cells(.Row, 11).Value = Date
Cells(.Row, 11).NumberFormatLocal = "yyyy/mm/dd"
12~14を更新したら更新日付を表示するのではなく、●を表示したい場合はどのようにしたらよろしいでしょうか?
よろしくお願い致します。
No.2
- 回答日時:
11行目と12行目を消せばいけそうな気がします。
理由はNo1の方が書かれている通りで、WorksheetのChangeイベントが同じシート内に2つあるからかと。
1つのChangeイベント内にTargetが("F:I")の場合と、("L:N")の場合の分岐で処理があればよいので
11行目:End Sub
12行目:Private Sub Worksheet_Change(ByVal Target As Range)
を消せば1つのChangeイベント内にそれぞれ分岐された記述になるかと思います。
No.1
- 回答日時:
「Private Sub Worksheet_Change」
は、おそらく他のファイルやシートからコピーしたものですね。
このプロシージャは、シートが変化したときに発生するイベント用に準備されている物で、1つのシートに1つしか存在できません。
同じ名前の物が2つあるから、「名前が変ですよ!」って怒られているんです。
>1.F列~I列のセルを更新すると(新規入力、削除 ※具体的には●を表示する、しないのどちらかです)、E列に更新日付が表示される。
EX.F3セルを更新するとE3セルに更新日付が表示される。F4セルを更新するとE4セルに更新日付が表示される。
>2.L列~N列のセルを更新すると(新規入力、削除、更新 ※具体的には日付や文字列の入力、削除、更新です)、K列に更新日時が表示される。
EX.L3セルを更新するとK3セルに更新日付が表示される。L4セルを更新するとK4セルに更新日付が表示される。
を条件で分離して、
「Private Sub Worksheet_Change」
内に記述しないとだめですね。
if 条件1 then
(1つ目の処理)
>With Target
>If .Row > 2 And .Value <> "" Then
>With Cells(.Row, "E")
>.Value = Date
>.NumberFormatLocal = "yyyy/mm/dd"
>End With
>End If
>End With
elseif 条件2 then
(2つ目の処理)
>With Target
>If .Row > 2 And .Value <> "" Then
>With Cells(.Row, "K")
>.Value = Date
>.NumberFormatLocal = "yyyy/mm/dd"
>End With
>End If
>End With
else
end if
のような形になりますが、条件の決定はお任せします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ちょっと先の未来クイズ第2問
9月9日(月)に発表される「第3回子どもマネー川柳」に入賞する川柳を考えてこちらに投稿してください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
-
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
-
4
ユーザーフォームのVBAエラー
その他(Microsoft Office)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
End Sub が必要です。
Access(アクセス)
-
7
【エクセル】関数で「A1が0でないならB1を表示」の式
その他(コンピューター・テクノロジー)
-
8
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
9
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
10
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
-
11
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
12
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル1行おきのセルを隣の...
-
文字列から英数字のみを抽出す...
-
エクセルで特定のセル内にだけ...
-
自分の左隣のセル
-
【Excel】4つとばしで合計する方法
-
エクセルで、A2のセルにA3...
-
セルを結合した時のエクセル集...
-
エクセルで、指定の値よりも大...
-
何時から何時までを○○、何時か...
-
SUMIF関数で、「ブランク以外を...
-
エクセルで年月日から月日のみへ
-
エクセルのセル内から数字だけ...
-
EXCEL マクロで2つの作業を行い...
-
エクセルでエンターを押すと任...
-
Excelにあるメールリストから個...
-
EXCEL-同じ組み合わせになった回数
-
エクセルで、土日のみのカレン...
-
エラー「#REF」の箇所を置き換...
-
Excelで特定の数字の間にあるセ...
-
スプレッドシートの作業範囲
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
エクセル1行おきのセルを隣の...
-
自分の左隣のセル
-
エクセルで、指定の値よりも大...
-
同一セル内の重複文字を削除し...
-
エクセルで、A2のセルにA3...
-
セルを結合した時のエクセル集...
-
エクセルで数字の組み合わせを...
-
エクセルで特定のセル内にだけ...
-
EXCELでマイナス値の入ったセル...
-
条件付き書式の色付きセルのカ...
-
excelで、空白を除いてデータを...
-
EXCELのcountif関数での大文字...
-
エクセルでエンターを押すと任...
-
Excelで大量のセルに一気に関数...
-
エラー「#REF」の箇所を置き換...
-
【Excel】4つとばしで合計する方法
-
エクセルで年月日から月日のみへ
-
EXECL バーコード生成でBarCode...
おすすめ情報