ここから本文です

エクセルのマクロについて Private Sub Worksheet_Change(ByVal Target As Ra...

tes********さん

2018/5/700:59:24

エクセルのマクロについて


Private Sub Worksheet_Change(ByVal Target As Range)

Dim MyRng As Range, R As Range, L As Range
Dim LastUpdated As Integer
Set MyRng = Intersect(Target, Range("D2:D21"))
If MyRng Is Nothing Then Exit Sub

LastUpdated = 5

For Each R In MyRng.Rows
Cells(R.Row, LastUpdated) = Now
Next

Set MyRng = Intersect(Target, Range("F2:F21"))
If MyRng Is Nothing Then Exit Sub

LastUpdated = 7

For Each R In MyRng.Rows
Cells(R.Row, LastUpdated) = Now
Next
End Sub


D列を変更するとE列も変更される、F列を変更するとG列も変更される。
というようなマクロを作りたいのですが上記のコードだとD.E列にしか適用されません。
何か足さなければいけない文があるのでしょうか?

閲覧数:
73
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

kik********さん

2018/5/707:40:46

以下変更で動くと思います

If MyRng Is Nothing Then Exit Sub ' ★

LastUpdated = 5

For Each R In MyRng.Rows
Cells(R.Row, LastUpdated) = Now
Next



If Not MyRng Is Nothing Then ' ★

LastUpdated = 5

For Each R In MyRng.Rows
Cells(R.Row, LastUpdated) = Now
Next
End If ' ★



まとめて記述を変更してみると、以下で良さそう

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim MyRng As Range, R As Range

   Set MyRng = Intersect(Target, Range("D2:D21,F2:F21"))
   If (MyRng Is Nothing) Then Exit Sub

   Application.EnableEvents = False
   For Each R In MyRng
      R.Offset(, 1).Value = Now()
   Next
   Application.EnableEvents = True
End Sub

  • kik********さん

    2018/5/708:11:05

    > Target.Offset(, 1) = Now
    > だけでも良さそうです。

    For Each で1つ1つまわしていたのは、
    その値によって、Now の設定 / 空欄 ?
    これへの変更が容易かも・・・・程度で

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/5/9 01:36:28

思い通りに動きました、ありがとうございました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

db1********さん

2018/5/707:51:32

Set MyRng = Intersect(Target, Range("D2:D21"))の式を変更する必要があるように思います。現状だと、まず、D2:D21の範囲にあるかどうかで判定されて、F列の場合は、D列ではないので、終了します。

なので、Set MyRng = Intersect(Target, Range("D2:D21"))の文に、"F2:F21"を追加した式に変更します。
Set MyRng = Intersect(Target, Range("D2:D21, f2:f21"))


なお、入力セルの右隣セルに日付を表示するなら、
Target.Offset(, 1) = Now
だけでも良さそうです。

プロフィール画像

カテゴリマスター

kxk********さん

2018/5/707:31:10

Set MyRng = Intersect(Target, Range("D2:D21"))
If MyRng Is Nothing Then Exit Sub

↑5行目のこの記述で、TargetがD列でなければExit Subします。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる