Excel在输入期间将字段与另一列相乘

Excel在输入期间将字段与另一列相乘,excel,vba,Excel,Vba,我有一个B列,其中有许多记录行,默认情况下为空。现在我想要它,如果有人在记录中输入任何整数,比如说在单元格B1,它应该计算为 integer value of cell * (-20) -20修饰符存储在let sayZ1中。输入B1、B12中的任何值。。。Bn的计算方法应与上述方法相同。我该怎么做 编辑 预期结果 您可以使用。将其粘贴到要在其上使用的图纸中: Private Sub Worksheet_Change(ByVal Target As Range) If Not Interse

我有一个
B
列,其中有许多记录行,默认情况下为空。现在我想要它,如果有人在记录中输入任何整数,比如说在单元格
B1
,它应该计算为

integer value of cell * (-20)
-20修饰符存储在let say
Z1
中。输入B1、B12中的任何值。。。Bn的计算方法应与上述方法相同。我该怎么做

编辑

预期结果

您可以使用。将其粘贴到要在其上使用的图纸中:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B:B")) Is Nothing Then
    Target = Target.Value * Range("Z1")
End If

End Sub
Intersect
方法测试以确保更改的单元格位于列
B
中<代码>目标是其值已更改的单元格。

您可以使用。将其粘贴到要在其上使用的图纸中:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B:B")) Is Nothing Then
    Target = Target.Value * Range("Z1")
End If

End Sub

Intersect
方法测试以确保更改的单元格位于列
B
Target
是其值已更改的单元格。

是的,使用
Change
事件,但需要考虑以下几点:

  • 如果用户粘贴多个值会怎么样
  • 如果用户输入公式怎么办
  • 如果用户删除了一些数据怎么办

  • 这个版本考虑了这些因素

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim rng As Range
        Dim cl As Range
    
        Application.EnableEvents = False
        Set rng = Intersect(Me.Columns(2), Target)
        If Not rng Is Nothing Then
            For Each cl In rng.Cells
                If Not IsEmpty(cl) Then
                    If Not cl.HasFormula Then
                        cl.Value = cl.Value * Me.Range("Z1")
                    End If
                End If
            Next
        End If
        Application.EnableEvents = True
    End Sub
    

    可以,使用
    Change
    事件,但您需要考虑以下几点:

  • 如果用户粘贴多个值会怎么样
  • 如果用户输入公式怎么办
  • 如果用户删除了一些数据怎么办

  • 这个版本考虑了这些因素

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim rng As Range
        Dim cl As Range
    
        Application.EnableEvents = False
        Set rng = Intersect(Me.Columns(2), Target)
        If Not rng Is Nothing Then
            For Each cl In rng.Cells
                If Not IsEmpty(cl) Then
                    If Not cl.HasFormula Then
                        cl.Value = cl.Value * Me.Range("Z1")
                    End If
                End If
            Next
        End If
        Application.EnableEvents = True
    End Sub
    

    这可以通过使用事件来实现。您是否熟悉宏或有点倾向于宏?如果没有,那么我想不出没有vba的工作方法。我不熟悉,但我很想学习:)然后试试Arich发布的内容:)它应该会起作用。这个问题促使人们用vba代码来回答,因为规范规定,用户修改的单元格应该是用另一个值重写的同一个单元格。也许电子表格需要这样做,但用户体验可能非常令人沮丧。您能想象使用一个电子表格时,您在单元格中键入的值不会粘住,但一按Enter键就会被重写吗?是否不可能/最好设置电子表格,以便用户在B列中输入一个值,并在C列中显示与Z1相乘的值?这可以使用事件。您是否熟悉宏或有点倾向于宏?如果没有,那么我想不出没有vba的工作方法。我不熟悉,但我很想学习:)然后试试Arich发布的内容:)它应该会起作用。这个问题促使人们用vba代码来回答,因为规范规定,用户修改的单元格应该是用另一个值重写的同一个单元格。也许电子表格需要这样做,但用户体验可能非常令人沮丧。您能想象使用一个电子表格时,您在单元格中键入的值不会粘住,但一按Enter键就会被重写吗?是否可以/更可取地设置电子表格,以便用户在B栏输入一个值,然后在C栏中的值旁边显示乘以Z1的值?我对此非常陌生,我在哪里打开工作表模块?有关模块的链接,请参阅我编辑的答案。使用
    Alt
    +
    F11
    打开VBEditor,然后在左侧的项目资源管理器中找到工作表(
    Ctrl
    +
    R
    ,如果不可见),然后双击工作表名称将其打开。我对此非常陌生,在哪里打开工作表模块?有关模块的链接,请参阅我编辑的答案。使用
    Alt
    +
    F11
    打开VBEditor,然后在左侧的项目资源管理器中找到工作表(
    Ctrl
    +
    R
    ,如果不可见),然后双击工作表名称将其打开。@chris neilsen尽管似乎涵盖了所有场景,我认为错误处理程序仍然很有价值,因为您正在打开和关闭事件:)@L42错误处理(几乎)总是可取的:)我不明白为什么关闭事件会影响这一点?我想到了另一个潜在的问题:用户输入非数字数据是什么?@chrisneilsen啊,因为如果某个地方发生错误,事件将不会再次打开。:)看见嗯,只是一个想法D@chrisneilsen虽然所有场景似乎都涵盖了,但我认为错误处理程序仍然很有价值,因为您正在打开和关闭事件:)@L42错误处理(几乎)总是可取的:)我不明白为什么关闭事件会影响这一点?我想到了另一个潜在的问题:用户输入非数字数据是什么?@chrisneilsen啊,因为如果某个地方发生错误,事件将不会再次打开。:)看见嗯,只是一个想法D