【问题标题】:Excel VBA looping through empty cells and retrieving row valuesExcel VBA循环遍历空单元格并检索行值
【发布时间】:2018-09-08 03:04:34
【问题描述】:

又是我!

我正在尝试做的是在我的范围内搜索任何空单元格,并且对于它找到的每个空单元格,从其行中返回一些值(偏移量)。

到目前为止我已经完成的代码:

 Private Sub buscarbtn_Click()
Dim fecha As Date: fecha = fechabsc.Value
Dim DESCUBIERTO As Boolean: DESCUBIERTO = False
Dim LR As Long
Dim r As Long
Dim i As Long
Dim diasem
Dim cell As Range


Hoja9.Range("L8").Value = fecha
fec = Hoja9.Range("L9").Value

If fec = "1" Then
    diasem = "D"
End If
If fec = "2" Then
    diasem = "L"
End If
If fec = "3" Then
    diasem = "M"
End If
If fec = "4" Then
    diasem = "W"
End If
If fec = "5" Then
    diasem = "J"
End If
If fec = "6" Then
    diasem = "V"
End If
If fec = "7" Then
    diasem = "S"
End If

Hoja9.Range("L10").Value = diasem
Set fecdes = prontuario1.Range("S:S").Find(what:=diasem, LookIn:=xlValues, LookAt:=xlWhole)

For Each cell In prontuario1.Range("S:S")

    If fecdes.Offset(0, 5).Value = "" Then
      DESCUBIERTO = True
      Debug.Print fecdes.Offset(0, 2).Value & " " & fecdes.Offset(0, 3).Value & " - " & fecdes.Offset(0, 4).Value
    End If
Next cell

End Sub

我使用的 Debug.Print 只是一个临时的测试解决方案,因为尝试打印整行只返回一个结果......现在我得到了同一行的多个结果。

我只能猜测我忽略了某些东西或使用 For each 循环完全错误。

我知道我的代码非常混乱,但如果您能指出正确的方向,我将永远感激不尽。

谢谢!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    看起来好像您的循环每次都引用 fecdes 而不是单元格,因此对于列 S 中的每个单元格,它正在重新评估 fecdes.offset(0,5) ,然后在 fecdes 单元格旁边打印值。但大概你至少想让它评估你在 S 列中循环的单元格,对吧?

    Private Sub buscarbtn_Click()
    Dim fecha As Date: fecha = fechabsc.Value
    Dim DESCUBIERTO As Boolean: DESCUBIERTO = False
    Dim LR As Long
    Dim r As Long
    Dim i As Long
    Dim diasem as string
    Dim cell As Range
    
    
    Hoja9.Range("L8").Value = fecha
    fec = Hoja9.Range("L9").Value
    
    
    select case fec
    case 1
        diasem = "D"
    case 2
        diasem = "L"
    case 3
        diasem = "M"
    case 4
        diasem = "W"
    case 5
        diasem = "J"
    case 6
        diasem = "V"
    case 7
        diasem = "S"
    end select
    
    Hoja9.Range("L10").Value = diasem
    r = prontuario1.cells(1,19).end(xldown).row
    
    For i=2 to r
    If prontuario1.cells(i,19).Offset(0, 5).Value = "" Then
      DESCUBIERTO = True
      Debug.Print prontuario1.cells(i,19).Offset(0, 2).Value & " " & prontuario1.cells(i,19).Offset(0, 3).Value & " - " & prontuario1.cells(i,19).Offset(0, 4).Value
    End If
    Next i
    
    End Sub
    

    【讨论】:

    • 是的,完全正确...虽然 fecdes 必须匹配 diasem,但我需要评估给定单元格是否为空,所以我试图循环 S 以检查 X (offset(0, 5)): prntscr.com/krsz5w 我需要为单元格声明其他内容吗?对不起,如果我在这方面有点慢......谢谢你修剪我的代码!
    • 好的,所以您使用列 S 作为锚点,并且您想要输出有关 X 列为空的行的信息,但仅针对 S 列中的某些值?您想对每个可能的值(D、L、M、W、J、V、S)执行此操作吗?如果是这样,您似乎可以使用像 dim lstrw 这样的底行计数器 as long prontuario1.cells(1,19).end(xldown).row
    • 在深入挖掘之后,我实际上采用了行计数器的想法,它似乎工作得很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多