2015-05-09 28 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)")