如何使用Excel VBAmacros循环行?

我是VBA新手,但对PHP很好。 这就是说,我正在苦于与VBA循环…

我有这个表格有40行叫做“SH1”:

SH1 ABCDE 1 2 One 1.0a 12 2 7 Two 2.0b 34 3 13 Three 3.0c 56 4 14 Four 4.0d 78 .. 40 

我需要遍历40行,并检查列A中的值。如果列A中的值符合我的标准(见下文),生成一些输出,并把它放在另一个表。

我的输出表是3列,称为“SH2”:

 SH2 ABCDE 1 1.0a 12 One 2.0b 34 Two 2 3.0c 56 Three 4.0d 78 Four .. 15 

我决定什么去哪里的标准:

 // First loop: if a1 < 8, put c1 in SH2 a1, put d1 in SH2 b1, put b1 in SH2 c1 if a2 < 8, put c2 in SH2 a1, put d2 in SH2 b1, put b2 in SH2 c1 // ... loop through a40 ... 

然后:

 // Second loop: if a1 > 8 AND a1 < 16, put c1 in SH2 a2, put d1 in SH2 b2, put b1 in SH2 c2 if a2 > 8 AND a2 < 16, put c2 in SH2 a2, put d2 in SH2 b2, put b2 in SH2 c2 // ... loop through a40 ... 

进度编辑:

似乎工作,但想知道是否有一个“干净”的方式?

 Sub CatchersPick2() Dim curCell As Range For Each curCell In Sheet4.Range("C3:C40").Cells If curCell.Value > 0 And curCell.Value < 73 Then cLeft = cLeft _ & curCell.Offset(0, 5) & "." _ & curCell.Offset(0, 6) & vbLf cMidl = cMidl _ & curCell.Offset(0, -2) & ", " _ & curCell.Offset(0, -1) & " " _ & curCell.Offset(0, 7) & vbLf cRght = cRght _ & curCell.Offset(0, 9) & " " _ & curCell.Offset(0, 2) & " " _ & curCell.Offset(0, 11) & " " _ & curCell.Offset(0, 10) & vbLf End If Next curCell Sheet6.Range("B3") = cLeft Sheet6.Range("C3") = cMidl Sheet6.Range("D3") = cRght Sheet6.Range("B3:D3").Rows.AutoFit Sheet6.Range("B3:D3").Columns.AutoFit End Sub 

 Dim cell As Range For Each cell In Range("a1:a40") 'do stuff here Next cell 

你可以用cell.Row获得你当前的行。 祝你好运^ _ ^

怎么样:

 Sub Catchers() Dim cell As Range Sheet1.Select 'SHEET: C For Each cell In Range("C3:C40") If cell.Value < 35 And cell.Value > 0 Then With Sheet6 .Range("B" & cell.Row) = cell.Offset(0, 5) _ & "." & cell.Offset(0, 6) .Range("C" & cell.Row) = cell.Offset(0, -2) _ & ", " & cell.Offset(0, -1) _ & " " & cell.Offset(0, 7) .Range("D" & cell.Row) = cell.Offset(0, 9) _ & " " & cell.Offset(0, 2) _ & " " & cell.Offset(0, 11) _ & " " & cell.Offset(0, 10) End With End If Next cell Sheet6.Range("B4:D4").Rows.AutoFit Sheet6.Range("B4:D4").Columns.AutoFit End Sub 

没有什么可以做的,但是…

首先,不要使用“单元格”这个词作为variables,它可以工作,但它是在玩火,所以

 Dim curCell as Range 

其次,你应该循环Range的Cells属性

 For Each curCell In Range("C3:C40").Cells 

第三,你不需要select单元格,你可以只操作curCellvariables

最后,你不需要使用ActiveCell,只需使用curCellvariables。

 If curCell.Value < 35 And curCell.Value > 0 Then cLefta = curCell.Offset(0, 5) & "." 

事实上,你也可以使用一个简短的variables,如'c',把整个事情放在一行上:

 cLeft = c.Offset(0,5) & "." & c.Offset(0,6) & vblf 

注意:如果您的设置每次都接近相同,那么使用工作表函数可能会更容易一些。