Excel循环列A操作列B

Excel循环列A操作列B,excel,vba,Excel,Vba,我目前正在寻找一个代码来改进我的仪表板。实际上,我需要知道如何在X列中使用循环,它将影响Y列(同一行上的单元格) 举个例子: A列:我有所有生产订单(无空单元格) B栏:销售商品成本(有时为空,但无所谓) 我实际上从SAP中提取信息,因此我的B列不是“货币”。 行动应是: 如果A+i不为空,则B+i的值变为“货币”。 我还需要得到一个“通用”代码,可以用于其他事情 这是我当前的代码 Sub-LoopTest() '选择单元格A2,*第一行数据*。 范围(“A2”)。选择 '将Do循环设置为

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

举个例子:

  • A列:我有所有生产订单(无空单元格)
  • B栏:销售商品成本(有时为空,但无所谓)
我实际上从SAP中提取信息,因此我的B列不是“货币”。 行动应是: 如果A+i不为空,则B+i的值变为“货币”。 我还需要得到一个“通用”代码,可以用于其他事情

这是我当前的代码

Sub-LoopTest()
'选择单元格A2,*第一行数据*。
范围(“A2”)。选择
'将Do循环设置为在到达空单元格时停止。
直到IsEmpty(ActiveCell)为止
ActiveCell.Offset(0,1).Style=“货币”
ActiveCell.Offset(1,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
解释-- 以上代码所做的是针对B列中的每个单元格,只要A列中的内容不是空的,它就会将格式设置为小数点后两位的货币

编辑:


不需要循环

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

子格式currency()
“调暗并设置行计数器
变暗,变长
r=1
'循环所有行,直到“A”为空
Do While(单元格(r,“A”).Value“”)
'格式为货币,如果不为空'
如果(单元格(r,“B”).Value“”),则
单元格(r,“B”).Style=“货币”
如果结束
'增量行
r=r+1
环
端接头

另一个示例,获取最后一行,以防数据包含任何空行

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
子更新列()
将工作作为工作表
最后一排一样长
变暗,变长
设置wks=ActiveSheet
lastRow=ActiveSheet.Cells.SpecialCells(xlLastCell.Row)
对于r=2到最后一行
如果wks.Cells(r,1)“,则
wks.Cells(r,2).NumberFormat=“$#,##0.00”
如果结束
下一个r
端接头

这里有一个非常简单的例子,我试着对其进行评论,但格式被弄乱了。它只是读取第1(A)列的内容。如果第1(A)列不为空,则将第2(B)列更新为货币。更改活动单元格会使VBA变得比需要的更复杂(在我看来)


请不要使用select,它很糟糕。请参阅文档:这样做似乎很有效,而且非常简单
Sub-LoopTest()将行设置为整数行=1,而不是空(单元格(行,1))单元格(行,2)。Style=“Currency”row=row+1 Wend End Sub
感谢您的响应!问题是,它不必要地处理工作表中的所有100万Excel行。@GordonBell——这一点很好!但是OP总是可以将i=1的
更改为行。将i=1的
计数为
到#
(他可以明确指定,通过更改
#
的值来处理多少行,谢谢Noceo,似乎很容易使用,如果需要其他操作,我可以更改操作
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
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