マクロ/VBA 数式を複数のセルに適用する方法

マクロ/VBA 数式を複数のセルに適用する方法

以下を入力しました:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$V$2" Then
    Range("U2") = Range("V2") * Range("O2")
End If

If Target.Address = "$U$2" Then
    Range("V2") = Range("U2") / Range("O2")
End If

End Sub

.....ただし、これはセル u2 と v2 でのみ機能します。この数式を列 U と列 V まで実行する必要があります。

どのような助けでも大歓迎です。

答え1

私の理解が正しければ、次のようなものを使用することができます。

Private Sub Worksheet_Change(ByVal Target As Range)

    'Don't apply to column headers
    If Target.Row = 1 Then Exit Sub

    'Make changes to anything in Column V (22)
    If Target.Column = 22 Then
        If IsNumeric(Range("V" & Target.Row)) And IsNumeric(Range("O" & Target.Row)) Then
            Range("U" & Target.Row) = Range("V" & Target.Row) * Range("O" & Target.Row)
        End If
    End If

    'Make changes to anything in Column U (21)
    If Target.Column = 21 Then
        If IsNumeric(Range("U" & Target.Row)) And IsNumeric(Range("O" & Target.Row)) And Range("O" & Target.Row) <> 0 Then
            Range("V" & Target.Row) = Range("U" & Target.Row) / Range("O" & Target.Row)
        End If
    End If

End Sub

このイベントは、セルが変更されるたびに発生します。そのため、どの列が変更されたかを確認します。If Target.Column = 22 Then列が 22 (列の数値表現V) の場合、コードの残りの部分に進みます。これはTarget.Row、変更されたセルの行番号を使用して、U、V、および O を変更することです。

編集: ゼロ除算のチェックを追加し、入力されたすべての項目が実際には数字であり、文字/記号ではないことを確認するチェックを追加しました。

答え2

考慮する:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Row = 1 Then Exit Sub
   If Intersect(Target, Range("U:V")) Is Nothing Then Exit Sub
   Application.EnableEvents = False
      If Not Intersect(Target, Range("V:V")) Is Nothing Then
         Target.Offset(0, -1).Value = Target.Value / Range("O" & Target.Row).Value
      Else
         Target.Offset(0, 1).Value = Target.Value / Range("O" & Target.Row).Value
      End If
   Application.EnableEvents = True
End Sub

注記: 最初の行は除外されます。

関連情報