Excel VBA代码实现数值取反

3
我正在Excel中编写一个VBA代码,以修改某一列的值:
  • 如果单元格C(i)为“Debit”,则将单元格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

1
需要注意的事项:1.定义变量类型。我相信你的VBE不知道你认为transType是一个Range;2.不要引用未定义变量的属性。如果变量被定义,变量名后面写的.将使您能够从列表中选择,如果它没有出现,则您错了。3.删除不必要的步骤,告诉新值等于旧值对您没有任何帮助。继续努力,您将很快编写出优秀的子程序。 - user3819867
1
根据您的叙述,您想将列C与“Debit”进行比较,但是您的代码将其与“D”进行比较。您应该使用 If Left(transType.Value, 1) = "D" Then 吗? - user4039065
@Jeeped 抱歉我的单元格混乱了,我本应该写“D”。当我在这里发布时,我写了“借方”以使其更清晰。干杯! - Ali Zakeri
3个回答

1
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, e.g. "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

Cells(myRow, "B").Value = newAmount 这段代码与 Cells(myRow, 2).Value = newAmount 的作用完全相同。 - BrakNicku
我一直活在谎言中。Mi scuzi. - user3819867

0

直接使用EVALUATE

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

0

看起来方法有点混乱,可能可以删除一些步骤。

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 引用前加上一个句点,将使该工作表成为单元格的父级。由于您正在循环遍历 For Each,因此只需要向左偏移一列即可从列 C 访问列 B。正如我的评论中所提到的,我不清楚您是使用 Debit 还是 D 作为条件,但这对任何一种情况都适用;如果列 C 只包含 D,则 Left 函数是完全不必要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接