Excel 计算金额并将总额放在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

我需要做一个系统,其中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 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=总价
如果结束
如果结束
端接头

第一个就是我想要的。我很感激:)