在Excel VBA中循环行并获取单元格。

4

我需要在Excel中寻求帮助。我的问题是:如何在此循环中获取每行的第42个单元格?例如:

For Each r In Sheets("Sheet2").UsedRange.Rows
     sval = r.Cells(42)

     If sval = "" Then
         If r.Cells(6).Value <> "" And r.Cells(7).Value <> "" And r.Cells(9).Value <> "" And r.Cells(10).Value <> "" And r.Cells(11).Value <> "" And r.Cells(12).Value <> "" Then
             MsgBox "wtehi"
             r.EntireRow.Interior.ColorIndex = 0
         Else
             MsgBox "yallow"
             emptyMand = "ok"
             r.EntireRow.Interior.ColorIndex = 6
         End If
     End If

Next

你的意思是什么?每个列的第42行? - ApplePie
我想循环遍历工作表中的每一行,并获取每一行第42列的单元格和值,就像上面一样。如果要查看列的值是否为空,则希望查看单元格6、7、9、10、11、12是否为空,然后将该行的颜色设置为白色,否则将其设置为黄色。 - samimvp
2个回答

4
为了遍历工作表ws的所有行,并对每一行获取第42列的单元格,你可以这样做:
For Each rw in ws.UsedRange.Rows
    cell = ws.Cells(rw.Row, 42)
Next

然而,以下方法速度是以上方法的两倍,且更易读:
For i = 1 to ws.UsedRange.Rows.Count
    cell = ws.Cells(i, 42)
Next

cell变量是一个对象引用,因此在赋值时必须使用Set语句,否则会抛出此错误。了解更多关于Set关键字的信息,请点击这里 - RBT
如果OP想要引用单元格作为“Range”对象,那么你是正确的,但他想要引用值,所以在这种情况下,“cell = ws.Cells(i, 42).Value”会更清晰明了。 - Asger

0

另一个推荐的非宏选项当然是使用条件格式,我建议在宏部分使用此选项:

Dim cl As Range
For Each cl In Intersect(Sheets("Sheet2").UsedRange, Sheets("Sheet2").Columns(42))

     If Len(cl) = 0 Then
         If Application.WorksheetFunction.CountIf(Cells(cl.Row, 6).Resize(1, 5), "") <> 5 Then
             MsgBox "wtehi"
             cl.EntireRow.Interior.ColorIndex = 0
         Else
             MsgBox "yallow"
             emptyMand = "ok"
             cl.EntireRow.Interior.ColorIndex = 6
         End If
     End If

Next cl

解决了,我知道如何在循环中通过Cells(rowVariable.Row, 42)获取每个单元格的单元格。感谢帮助。 - samimvp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接