Excel VBA代码以求反值

Excel VBA代码以求反值,vba,excel,Vba,Excel,我正在Excel中编写VBA代码,以修改特定列的值: 如果单元格C(i)为“借方”,则将单元格B(i)中的金额乘以-1 否则什么也不做 下面是我的代码,但遗憾的是它不起作用:( 这里似乎有一些混搭的方法,有些步骤可能可以删除 Private Sub Calc() Dim transType As Range With Worksheets("Sheet2") For Each transType In .Range("C4").Resize(97, 1)

我正在Excel中编写VBA代码,以修改特定列的值:

  • 如果单元格C(i)为“借方”,则将单元格B(i)中的金额乘以-1
  • 否则什么也不做
下面是我的代码,但遗憾的是它不起作用:(


这里似乎有一些混搭的方法,有些步骤可能可以删除

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子句定义工作表,并在所有
.Cell
.Range
引用前面加上句点,将使该工作表成为单元格的父级。由于您对每个
循环执行
,因此只需向左偏移一列即可访问column B来自C列。正如我在评论中所提到的,我不清楚您是否使用借记或D作为标准,但这两种标准都适用;如果C列仅包含D..

直接使用EVALUATE,则根本不需要
Left
函数

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

您需要注意的事项:1.定义变量类型。我很肯定您的VBE不知道您认为
transType
范围
;2.不要引用未定义变量的属性。如果定义了变量,则在变量名后写入的
将允许您从列表中进行选择,如果它没有定义sn没有出现,你错了。3.删除不必要的步骤,告诉新值等于旧值不会给你带来任何好处。尽管如此,你很快就会写出很棒的subs。根据你的叙述,你想将C列与Debit进行比较,但你的代码会将其与D进行比较。如果保留(transType.value,1)=“D”,你是否应该使用
然后,
?@jeep为我的单元格中出现的混乱感到抱歉,我在这里发布时写下了“Debit”以使其更清楚。干杯!
单元格(myRow,“B”)。Value=newAmount
这将与
单元格(myRow,2)的工作方式完全相同。Value=newAmount
我一直在撒谎。Mi scuzi。
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
Worksheets("Sheet2").Range("D4:D100") = Evaluate("=IF(LEFT(Sheet2!C4:C100,1)=""D"",-1*(Sheet2!D4:D100),Sheet2!D4:D100)")