「これはヤバかったな」という遅刻エピソード

(シートモジュールです)

Private Sub Worksheet_Change(ByVal Target As Range)
'6行未満は対象外
If Target.Row < 6 Then Exit Sub
'6,8,10,12,14行・・・以外は対象外
If Target.Column < 6 Then Exit Sub
If (Target.Column - 6) Mod 2 <> 0 Then Exit Sub
Target.Offset(, 1).Value = Date
End Sub

以上のコードを入れてあります。入力箇所の仕様としては、
左側:名前
右側:左側に名前を入力すると、入力された日付が表示される(←ここに作用されるコードになっています)

名前を入力すると日付が表示されるのですが、、、
例 №○問題点
(改善したいこと)
№①名前を消しても日付は表示されたまま
(名前を消すと日付も消えるようにしたい)

№②名前の入力訂正として範囲してdeleteすると、deleteした範囲分の右側に日付が表示される
(①と同様に範囲分名前をdeleteしても日付が入力されないようにしたい)

№③列まで作用させたいのに、それ以降の列にも同じ作用になる
(日付が表示されるのがAM列までにしたい)
※ R6、T6、V6、X6、Z6、AB6、AD6、AF6、AH6、AJ6、AL6列が名前を入力する列
※ S6、U6、W6、Y6、AA6、AC6、AE6、AG6、AI6、AK6、AM6列が入力された日付が表示される列

お手数ですが、分かる方ご教示をお願いできないでしょうか。
よろしくお願いいたします。

「excelのVBAについて、以下のコード」の質問画像

A 回答 (2件)

No①②③の対応版です。

(作り直しになります)
No②の範囲選択ですが、範囲が全て有効なセル内に入っている場合のみ、
その範囲を処理するようにしています。そうでない場合は、何も処理しません。

例:
F5~F10の場合、処理なし(F5が無効セル)
F6~G10の場合、処理なし(G列が無効セル)
F6~F10の場合、処理する

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
For Each r In Target
'6行未満は対象外
If r.Row < 6 Then Exit Sub
'AL列を超えた場合は、対象外
If r.Column > 38 Then Exit Sub
'6,8,10,12,14行・・・以外は対象外
If r.Column < 6 Then Exit Sub
If (r.Column - 6) Mod 2 <> 0 Then Exit Sub
Next
Application.EnableEvents = False
For Each r In Target
If r.Value = "" Then
r.Offset(, 1).Value = ""
Else
r.Offset(, 1).Value = Date
End If
Next
Application.EnableEvents = True
End Sub
    • good
    • 1
この回答へのお礼

作り直しいただき誠にありがとうございます。
無事イメージ通りの動きができるようになりました。
お忙しいところお手数おかけしました。

お礼日時:2023/12/26 09:47

こんにちは



いろいろありますけれど・・

>№①、№②
変更されたセルの値が、空白なら右隣も空白にすれば良いです。
具体的には
If Target.Value = "" Then Target.Offset(, 1).Value = "" Else Target.Offset(, 1).Value = Date
みたいな感じです。

一方で、ご提示のコードは変更セルが1ヶ所のみであると決め打ちのコードになっていますので、コピペやデリートなどで複数セルが変更された場合はを想定されていません。
ですので、複数セルにも対応できるようにするなら、根本的に考え方を変えて作り直すしかありません。


>№③
どの列の範囲にしたいのかがよくわかりませんけれど・・
ご提示のコードで、「偶数列であること」をチェックしているのと同じように、指定の列範囲内であることをチェックすれば良いでしょう。
具体的には
 Target.Column >= 最小列番号 And Target.Column <= 最大列番号
のような感じです。
上記同様に、複数セルを対象とする場合は、そのままTargetで判定するのではうまくいきませんけれど・・
    • good
    • 7

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報