Excel VBA代码否定值

我在Excel中编写VBA代码来修改某个列的值:

  • 如果小区C(i)是“借方”,则将小区B(i)中的数量乘以-1
  • 否则什么都不做!

下面是我的代码,但可悲的是它不工作:(

Private Sub Calc() For Each transType In Worksheets("Sheet2").Range("C4", "C100") myRow = transType.Row oldAmount = Worksheets("Sheet2").Range("B" & myRow) If transType.Value = "D" Then newAmount.Value = oldAmount.Value * -1 Else: newAmount = oldAmount End If Cells(myRow, "B").Value = newAmount Next transType End Sub 

 Private Sub Calc() Dim transType As Range, oldAmount as range 'important For Each transType In Worksheets("Sheet2").Range("C4", "C100") myRow = transType.Row If transType.Value Like "D*" Then 'if it's "D" something, eg "D" or "Deb" or "Debit" Worksheets("Sheet2").Range("B" & myRow).Value = Worksheets("Sheet2").Range("B" & myRow).Value * -1 End If 'Cells(myRow, "B").Value = newAmount 'this won't work, it asks for index, the index for column B is 2 Next transType End Sub 

似乎有一些混搭的方法,一些步骤可能会被删除。

 Private Sub Calc() Dim transType As Range With Worksheets("Sheet2") For Each transType In .Range("C4").Resize(97, 1) If Left(transType.Value, 1) = "D" Then _ transType.Offset(0, -1) = transType.Offset(0, -1).Value * -1 Next transType End With End Sub 

尝试在特定的工作区内工作。 使用With / End With子句定义工作表,并将所有.Range.Range引用.Range为句点,将使该工作表成为单元格的父级。 由于您正在遍历For Each ,所以只需要向左偏移一列以从列C访问列B.如我的评论中所述,我不清楚您是使用借记还是D作为条件,但是这将起作用为了; 如果C列只包含D

直接使用EVALUATE

 Worksheets("Sheet2").Range("D4:D100") = Evaluate("=IF(LEFT(Sheet2!C4:C100,1)=""D"",-1*(Sheet2!D4:D100),Sheet2!D4:D100)")