Excel循环列操作列B.

时间:2017-06-26 14:04:58

标签: excel excel-vba vba

我目前正在寻找改进我的信息中心的代码。实际上,我需要知道如何在列X中使用一个循环来影响列Y(同一行上的单元格)。

举个例子:

  • 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

4 个答案:

答案 0 :(得分: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位小数的货币

修改

不需要循环

答案 1 :(得分:0)

我可以看到我比其他人慢一点,但如果你想要更多的灵感,那么heer是一个超级简单的解决方案(也很容易理解)

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

答案 2 :(得分:0)

另一个示例,获取Last Row,以防您的数据包含任何空白行。

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

答案 3 :(得分: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