[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Private Sub Worksheet_Changeを2つ繋げたい』(湯豆腐)
毎度お世話になります。
Private Sub Worksheet_Changeのコードを2つ繋げたいのですがうまくいかず、
後のコードのマクロが実行されません。
EndIfの後にそのままDim〜と繋げたり、
Select Case Target.Address
Case "A5:A7"
If〜
EndIf
Case "F5:K47,M5:O47"
dim〜
EndWith
で分けたりしてみたのですがどうにもうまくいかず…
単体ではどちらも正常に機能します。
Private Sub Worksheet_Change(ByVal Target As Range)
'年月に対して日付を曜日に合わせて移動 If Intersect(Target, Range("A1:E1")) Is Nothing Then Exit Sub Else Range("A5").Copy Range("A6:A47").PasteSpecial Paste:=xlPasteFormulas ' 日付5行をコピーして6〜47行へペースト Application.CutCopyMode = False
Cells(Weekday(DateSerial(Range("A1"), Range("E1"), 1)) + 5, 1) = 1 '年月から1日の曜日のシリアル値を取得して5行(タイトル行)足したセルに1と入力する End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) '1234と入力すると12:34と変換
Dim t As String On Error Resume Next t = Target.Value If Application.Intersect(Target, Range("F5:K47,M5:O47")) Is Nothing Then Exit Sub If Len(t) = 3 Then t = "0" & t If Len(t) = 2 Then t = "00" & t If Len(t) = 1 Then t = "000" & t With Target If Len(t) <> 4 Then Exit Sub .NumberFormatLocal = "h:mm;@" Application.EnableEvents = False .Value = Left(t, 2) & ":" & Right(t, 2) Application.EnableEvents = True End With End Sub
どうかよろしくお願いいたします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
>単体ではどちらも正常に機能します。
失礼ながら、ちょっと不安になります。・・けど、お言葉を信じることにします。 ただ、最低でも無駄なイベント発生の連鎖は抑止してください。
さて、「2つ繋げたい」とのことなので、 直ぐExitしないで、そこでもう一方のプログラムをCallすれば良さそうに思います。 ↓ >If Intersect(Target, Range("A1:E1")) Is Nothing Then > Exit Sub
勿論、同名のプログラムは共存できないので、もう一方のプログラムは 「Private Sub Worksheet_TimeChange」とでも変更する。
具体的には一番目のプログラムは以下となる。
Private Sub Worksheet_Change(ByVal Target As Range) '年月に対して日付を曜日に合わせて移動 If Intersect(Target, Range("A1:E1")) Is Nothing Then Call Worksheet_TimeChange(Target) Exit Sub Else Range("A5").Copy
Application.EnableEvents = False ’←無駄なイベント発生の抑止
Range("A6:A47").PasteSpecial Paste:=xlPasteFormulas ' 日付5行をコピーして6〜47行へペースト Application.CutCopyMode = False
'年月から1日の曜日のシリアル値を取得して5行(タイトル行)足したセルに1と入力する Cells(Weekday(DateSerial(Range("A1"), Range("E1"), 1)) + 5, 1) = 1
Application.EnableEvents = True End If End Sub
'プログラムの名前だけ変更する Private Sub Worksheet_TimeChange(ByVal Target As Range) '1234と入力すると12:34と変換 '以下は従来と同じ End Sub
※実地テストはしておりません。あしからず。
(半平太) 2023/09/23(土) 16:31:50
無事に動きました!
有難うございます!
(湯豆腐) 2023/09/23(土) 17:12:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.