2017-06-26 83 views
0

我正在查找代碼以改進我的儀表板。實際上,我需要知道如何在列X中使用循環,這會影響列Y(同一行上的單元格)。Excel循環列A動作列B

給你舉個例子:

  • 列A:我有所有生產訂單(沒有空白單元格)
  • B欄:銷貨成本(有時空白,但無所謂)

我實際上從SAP獲取信息,所以我的列B不是「貨幣」。 該行爲應爲: 如果A + i不爲空,則B + i的值變爲「貨幣」。 這也是我得到一個「通用」的代碼,我可以用其他的東西。

這是我當前的代碼...

Sub LoopTest() 
 
     ' Select cell A2, *first line of data*. 
 
     Range("A2").Select 
 
     ' Set Do loop to stop when an empty cell is reached. 
 
     Do Until IsEmpty(ActiveCell) 
 
    ActiveCell.Offset(0, 1).Style = "Currency" 
 
     ActiveCell.Offset(1, 0).Select 
 
    Loop 
 
End Sub

+0

請不要使用select,它的可怕。請參閱文檔:https://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9292/avoid-using-select-or-activate#t=201706261411041591846 – Luuklag

+0

像這樣的東西似乎工作,很漂亮容易 '子LoopTest() 昏暗行作爲整數 行= 1 儘管不爲IsEmpty(細胞(行,1)) 細胞(行,2).Style = 「貨幣」 行=行+ 1 Wend End Sub' – Colin

回答

0

另一個例子,獲取最後一行,以防您的數據包含任何空白行。

Sub UpdateColumns() 
    Dim wks As Worksheet 
    Dim lastRow As Long 
    Dim r As Long 

    Set wks = ActiveSheet 
    lastRow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row 

    For r = 2 To lastRow 
     If wks.Cells(r, 1) <> "" Then 
      wks.Cells(r, 2).NumberFormat = "$#,##0.00" 
     End If 
    Next r 
End Sub 
0

嘗試以下操作:

Sub calcColumnB() 

    Dim strLength As Integer 
    Dim i As Long 

    For i = 1 To Rows.Count 

     columnAContents = Cells(i, 1).Value 

     strLength = Len(columnAContents) 

     If strLength > 0 Then 

      Cells(i, 2).NumberFormat = "$#,##0.00" 

     End If 


    Next i 

End Sub 

Explanation-- 什麼上面的代碼確實是在每個單元B列,只要列A中的內容不爲空,它將格式設置爲2位小數位的貨幣

編輯:

沒有需要循環

+0

謝謝你的迴應! – Damien

+0

與此問題是,它不必要地處理工作表中的所有100萬Excel行。 –

+0

@ GordonBell - 好點!但OP可以隨時改變'For i = 1 To Rows。計數'爲'對於i = 1到#'(在那裏他可以明確地指定,通過改變'#'的值來處理多少行 – Rushikumar

0

我可以看到我比別人慢了一點,但如果你希望有更多的靈感,希爾是一個超級簡單的解決方案(如易於理解)

Sub FormatAsCurrency() 
    'Dim and set row counter 
    Dim r As Long 
    r = 1 

    'Loop all rows, until "A" is blank 
    Do While (Cells(r, "A").Value <> "") 
     'Format as currency, if not blank' 
     If (Cells(r, "B").Value <> "") Then 
      Cells(r, "B").Style = "Currency" 
     End If 

     'Increment row 
     r = r + 1 
    Loop 

End Sub 
+0

謝謝Noceo,看起來很容易使用,我將能夠改變行動if我需要別的東西 – Damien

0

這裏是一個非常簡單的,我試圖評論 - 但格式化搞砸了。它只是讀取列1(A)的內容。如果第1列(A)不是空的,則將第2列(B)更新爲貨幣。改變活動單元格使得VBA比它需要更復雜(在我看來)

Sub LoopTest() 
    Dim row As Integer 
    row = 1 

    While Not IsEmpty(Cells(row, 1)) 
     Cells(row, 2).Style = "Currency" 
     row = row + 1 
    Wend 

End Sub 
相關問題