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 sayZ1
中。输入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