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