Excel 计算金额并将总额放在VBA中未显示x的位置
我需要做一个系统,其中VBA计算产品的数量,然后把X的总末端 示例如下: 目前,我有此代码,但它不起作用:Excel 计算金额并将总额放在VBA中未显示x的位置,excel,vba,Excel,Vba,我需要做一个系统,其中VBA计算产品的数量,然后把X的总末端 示例如下: 目前,我有此代码,但它不起作用: Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("H1:H150")) Is Nothing Then If Not IsEmpty(Target) Then Dim TargetPrice, MoveDown As Ran
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
If Not IsEmpty(Target) Then
Dim TargetPrice, MoveDown As Range
Set MoveDown = Target
Set TargetPrice = Target.Offset(, 1)
Dim TotalPrice As Double
If Not MoveDown.Value = "x" Then
TotalPrice = TotalPrice + TargetPrice.Value
Else
Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
TotalPrice = TotalPrice + TargetPrice.Value
Set TargetPrice = TargetPrice.Offset(1)
Set MoveDown = MoveDown.Offset(1)
Loop
End If
Set TargetPrice = TargetPrice.Offset(, 1)
Range(TargetPrice.Address).Value = TotalPrice
End If
End If
End Sub
我得到这些结果 根据该代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetPrice As Range, MoveDown As Range
Dim TargetUnitPrice As Range, Amount As Range
Dim TotalPrice As Double
If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
Set MoveDown = Target
' Capture the case where an "x" is not entered, but there are "x"'s above
Do Until MoveDown.Offset(-1).Value <> "x"
Set MoveDown = MoveDown.Offset(-1)
Loop
Set TargetUnitPrice = MoveDown.Offset(, 1)
Set Amount = MoveDown.Offset(, -1)
If Not IsEmpty(Target) Then
TotalPrice = 0#
Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
TotalPrice = TotalPrice + (Amount.Value * TargetUnitPrice.Value)
Set TargetUnitPrice = TargetUnitPrice.Offset(1)
Set Amount = Amount.Offset(1)
Set MoveDown = MoveDown.Offset(1)
Loop
TotalPrice = TotalPrice + (Amount.Value * TargetUnitPrice.Value)
Set TargetPrice = MoveDown.Offset(, 2)
TargetPrice.Value = TotalPrice
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetPrice As Range, MoveDown As Range
Dim TargetUnitPrice As Range
Dim TotalPrice As Double
If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
Set MoveDown = Target
' Capture the case where an "x" is not entered, but there are "x"'s above
Do Until MoveDown.Offset(-1).Value <> "x"
Set MoveDown = MoveDown.Offset(-1)
Loop
Set TargetUnitPrice = MoveDown.Offset(, 1)
If Not IsEmpty(Target) Then
TotalPrice = 0#
Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
TotalPrice = TotalPrice + TargetUnitPrice.Value
Set TargetUnitPrice = TargetUnitPrice.Offset(1)
Set MoveDown = MoveDown.Offset(1)
Loop
TotalPrice = TotalPrice + TargetUnitPrice.Value
Set TargetPrice = MoveDown.Offset(, 2)
TargetPrice.Value = TotalPrice
End If
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
将目标价格变暗为范围,向下移动为范围
Dim TargetUnitPrice作为范围,金额作为范围
总价格上涨一倍
如果不相交(目标,范围(“H1:H150”))则为零
设置向下移动=目标
'捕获未输入“x”但上面有“x”的情况
直到向下移动。偏移量(-1)。值“x”
设置向下移动=向下移动。偏移(-1)
环
设置TargetUnitPrice=MoveDown.Offset(,1)
设置金额=向下移动。偏移量(,-1)
如果不是空的(目标),那么
总价=0#
直到i空(MoveDown.Value)或不MoveDown.Value=“x”为止
TotalPrice=TotalPrice+(Amount.Value*TargetUnitPrice.Value)
设置TargetUnitPrice=TargetUnitPrice.Offset(1)
设置金额=金额。偏移量(1)
设置向下移动=向下移动。偏移量(1)
环
TotalPrice=TotalPrice+(Amount.Value*TargetUnitPrice.Value)
设置TargetPrice=MoveDown.Offset(,2)
TargetPrice.Value=总价
如果结束
如果结束
端接头
注意:在这种情况下,有人可能会在几个“x”下面输入“m”。这仍然可以正确计算总数
注意:如果我错误地解释了金额乘以价格的要求,那么只需删除所有金额参考
我得到这些结果 使用此代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetPrice As Range, MoveDown As Range
Dim TargetUnitPrice As Range, Amount As Range
Dim TotalPrice As Double
If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
Set MoveDown = Target
' Capture the case where an "x" is not entered, but there are "x"'s above
Do Until MoveDown.Offset(-1).Value <> "x"
Set MoveDown = MoveDown.Offset(-1)
Loop
Set TargetUnitPrice = MoveDown.Offset(, 1)
Set Amount = MoveDown.Offset(, -1)
If Not IsEmpty(Target) Then
TotalPrice = 0#
Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
TotalPrice = TotalPrice + (Amount.Value * TargetUnitPrice.Value)
Set TargetUnitPrice = TargetUnitPrice.Offset(1)
Set Amount = Amount.Offset(1)
Set MoveDown = MoveDown.Offset(1)
Loop
TotalPrice = TotalPrice + (Amount.Value * TargetUnitPrice.Value)
Set TargetPrice = MoveDown.Offset(, 2)
TargetPrice.Value = TotalPrice
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetPrice As Range, MoveDown As Range
Dim TargetUnitPrice As Range
Dim TotalPrice As Double
If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
Set MoveDown = Target
' Capture the case where an "x" is not entered, but there are "x"'s above
Do Until MoveDown.Offset(-1).Value <> "x"
Set MoveDown = MoveDown.Offset(-1)
Loop
Set TargetUnitPrice = MoveDown.Offset(, 1)
If Not IsEmpty(Target) Then
TotalPrice = 0#
Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
TotalPrice = TotalPrice + TargetUnitPrice.Value
Set TargetUnitPrice = TargetUnitPrice.Offset(1)
Set MoveDown = MoveDown.Offset(1)
Loop
TotalPrice = TotalPrice + TargetUnitPrice.Value
Set TargetPrice = MoveDown.Offset(, 2)
TargetPrice.Value = TotalPrice
End If
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
将目标价格变暗为范围,向下移动为范围
Dim TargetUnitPrice作为范围
总价格上涨一倍
如果不相交(目标,范围(“H1:H150”))则为零
设置向下移动=目标
'捕获未输入“x”但上面有“x”的情况
直到向下移动。偏移量(-1)。值“x”
设置向下移动=向下移动。偏移(-1)
环
设置TargetUnitPrice=MoveDown.Offset(,1)
如果不是空的(目标),那么
总价=0#
直到i空(MoveDown.Value)或不MoveDown.Value=“x”为止
总价=总价+目标单价。价值
设置TargetUnitPrice=TargetUnitPrice.Offset(1)
设置向下移动=向下移动。偏移量(1)
环
总价=总价+目标单价。价值
设置TargetPrice=MoveDown.Offset(,2)
TargetPrice.Value=总价
如果结束
如果结束
端接头
第一个就是我想要的。我很感激:)