如果列a包含某些文本,请参阅相应行的值,如果它已从之前更改,则进行计算

时间:2016-06-09 12:28:05

标签: excel vba excel-vba macros

我不确定这是否会采用公式或VBA编码,但要么会有所帮助。这很难解释,但这里是我能找到的最简单的方法:如果列“A”包含某些文本(在本例中为“ZS”),请参阅第3列中相应行的值,如果是当前的值与前一个“ZS”行对应的值发生了变化,当然使用不同的参考单元计算“=((C10 * 0.11)+(C11 * 0.22)-H9 * 0.1)”。我一直在尝试解决这个问题一段时间了,任何帮助都表示赞赏!

1 个答案:

答案 0 :(得分:0)

VBA将是最简单,最干净的方式。这是你正在寻找的吗?我不确定你的"参考"单元格正在引用,但我使用了您的示例值。

  Sub test1
  Dim ZS1 As Range, ZS2 As Range, val1 as range, val2 as range
  Dim ws as worksheet
  Set ws = ThisWorkbook.ActiveSheet
  Set val1 = ws.Range("$C$10")
  Set val2 = ws.Range("$H$9")

  'Find first ZS
  For Each ZS1 in ws.Range(ws.Cells(2, 1), ws.Cells(ws.Cells(Rows.Count, 1).End(xlUp).Row, 1))
     If ZS1 = "ZS" Then
        'Step back to find previous ZS value
        For i = ZS1.Row - 1 to 1 Step -1
           Set ZS2 = ws.Cells(i, 1)
           If ZS2.Value =  "ZS" Then
              'If column 3 value in first ZS row is not equal to column 3 value in previous row then
              If ZS1.Offset(0,2).Value <> ZS2.Offset(0,2).Value Then
                 MsgBox ((val1.Value * 0.11) + (val1.Offset(1,0).Value * 0.22)-val2.Value * 0.1)
                 Exit For
              Else
                 Exit For
              End If
           End If
        Next
     End If
  Next ZS1
  End Sub