2017-12-15 8 views
-2

日付と同じ関連する行の値が変更された場合は、最初の列(A)の日付を更新したいと考えています。VBA、複数の選択で同じマクロを実行

以下のコードを使用して、一度に1つのセルに対して実行できます。ただし、複数のセルが選択されている場合、マクロは実行を停止します。複数のセルでも動作するように、コードの下でアップグレードする手助けはできますか?

私はあらかじめ定義されたターゲットと範囲に必要なコードを見つけましたが、コード内でターゲットまたは選択範囲を定義しないと機能します。

Example

Dim oldValue As Variant 

'Get the old selected cell value 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    oldValue = Target.Value 
End Sub 

'Update the date in first column when new value on selected cell 
Private Sub Worksheet_Change(ByVal Target As Range) 
    If (Target.Count = 1) And Not (Target.Column = 1) And Not (Target.Value = oldValue) Then 
     Cells(Target.Row, 1) = Date 
    Else 

    End If 
End Sub 

編集(コメント)

私は、複数のセルが変更された場合、関連する日付を更新できるようにしたいです。たとえば、文字「x」を範囲C6,C8:C9にコピーすると、A6,A8およびA9の日付が変更されます。しかし、文字「a」を同じセルにコピーするときは、A6A9のみ変更する必要があります。これは、変更する前にC8が既に「a」だったためです。

+1

ループを使用します。 Simples。 –

+0

日付はどのように更新されますか?プラス一日ですか?マイナス10日? – JohnyL

+0

最終変更日時まで – SOKRATES

答えて

1
Dim dict As Object 

'Get the old selected cell value 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Set dict = CreateObject("Scripting.Dictionary") 
    For Each cell In UsedRange.Cells 
     dict.Add cell.Address, cell.Value 
    Next cell 
End Sub 

'Update the date in first column when new value on selected cell 
Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not (Target.Column = 1) Then 
     For Each cell In Target.Cells 
      If dict.exists(cell.Address) Then 
       If dict(cell.Address) <> cell.Value Then 
        Application.EnableEvents = False 
        Cells(cell.Row, 1) = Date 
        Application.EnableEvents = True 
       End If 
      Else 'if the cell was not used before and this is a new row being filled 
       Application.EnableEvents = False 
       Cells(cell.Row, 1) = Date 
       Application.EnableEvents = False 
      End If 
     Next cell 
    End If 
End Sub 
+0

"複数のセルでも動作するように、コードの下でアップグレードすることはできますか?"という提案は、単一のセルが変更された場合にのみ有効です。 – YowE3K

+0

あなたは1つのセルが変更されると、すべての日付を更新しますか? – Ibo

+1

いいえ、複数のセルが変更された場合、OPは関連する日付を更新できるようにします。おそらく彼らは文字 "x"を "C6、C8:C9"の範囲に(どこかから)コピーしており、A6、A8、A9の日付を変更したいと思っています。 (ただし、 "x"の代わりに同じセルに "a"をコピーした場合、C8はコピーの前に "a"であるため、A6とA9のみが変更されます) – YowE3K

関連する問題