2015-05-09 29 views
3

我正在写在Excel中VBA代码来修改某列的值:Excel中VBA代码否定值

  • 如果小区C(i)是“借记卡”的相乘中细胞的量B(i)by -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 *进行比较。你应该使用'如果左(transType.Value,1)=“D”然后'? – Jeeped

+0

@Jeeped对不起,在我的电池混合我有“D”。当我在这里发布时,我写下了“借记卡”以使其更加清晰。干杯! –

回答

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 
+0

'Cells(myRow,“B”)。Value = newAmount'这与'Cells(myRow,2).Value = newAmount'完全相同。 – BrakNicku

+0

我一直在说谎。 Mi scuzi。 – user3819867

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 

尝试在特定的工作空间内工作。定义了带/尾随着子句中的工作表,并全部作序和.Cell.Range带有句点的引用将授予该工作表作为单元格的父级。由于您正在循环访问For Each,因此您只需要向左偏移一列即可访问C列中的B列。正如我的评论中所述,我不清楚您是使用借记卡还是D作为标准,但是这对任何一方都有效;该Left函数就是不必要的,如果C列只包含d ..

0

直接使用EVALUATE

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