Excel VBA循环直到单元格不为空

Excel VBA循环直到单元格不为空,excel,vba,Excel,Vba,我相信这将是相当直截了当的,但我正在与这个逻辑作斗争。我试图根据填充的数据创建一个行计数,然后循环遍历中的所有空单元格,直到填充了notes列的字段。其思想是将该值/注释写入SQL表 到目前为止,我掌握的代码是: NoteCount = WorksheetFunction.CountA(Sheets("Missing").Range("B10:B7500")) Sheets("Missing").Range("L10").Select For i = 10 To NoteCount

我相信这将是相当直截了当的,但我正在与这个逻辑作斗争。我试图根据填充的数据创建一个行计数,然后循环遍历中的所有空单元格,直到填充了notes列的字段。其思想是将该值/注释写入SQL表

到目前为止,我掌握的代码是:

NoteCount = WorksheetFunction.CountA(Sheets("Missing").Range("B10:B7500"))

Sheets("Missing").Range("L10").Select

For i = 10 To NoteCount    
    If ActiveCell.Value = "" Then    
        Next i    
    Else:    
        'SQL Code entered here'    
    End If    
Next I

我知道这段代码不起作用,因为我的For循环没有对齐,但我只是想展示我要实现的目标。

这可以通过使用下面的代码来实现,只需稍微短一点和简单一点:

Dim i As Long

With Sheets("Missing")
    For i = 10 To .Cells(.Rows.Count, "B").End(xlUp).Row ' loop until last row with data in column "B" (skip blank rows)
        If Trim(.Range("L" & i).Value) <> "" Then ' check if value in cell in column "L" in current row is not empty
            'SQL Code entered here'
        End If
    Next i
End With
Dim i尽可能长
附页(“缺失”)
对于i=10到.Cells(.Rows.Count,“B”).End(xlUp.Row)循环,直到最后一行的数据在列“B”中(跳过空行)
如果修剪(.Range(“L”&i).Value)”,则检查当前行“L”列中单元格中的值是否为空
'此处输入的SQL代码'
如果结束
接下来我
以

使用以下代码,只需稍微缩短和简化即可实现:

Dim i As Long

With Sheets("Missing")
    For i = 10 To .Cells(.Rows.Count, "B").End(xlUp).Row ' loop until last row with data in column "B" (skip blank rows)
        If Trim(.Range("L" & i).Value) <> "" Then ' check if value in cell in column "L" in current row is not empty
            'SQL Code entered here'
        End If
    Next i
End With
Dim i尽可能长
附页(“缺失”)
对于i=10到.Cells(.Rows.Count,“B”).End(xlUp.Row)循环,直到最后一行的数据在列“B”中(跳过空行)
如果修剪(.Range(“L”&i).Value)”,则检查当前行“L”列中单元格中的值是否为空
'此处输入的SQL代码'
如果结束
接下来我
以

如果有大量数据,您可能会发现某些方法的速度非常慢。这将比在列中的每个单元格中循环更快:

Sub test()
    Dim rng As Range, found As Range
    Dim firstAddress As String

    With ThisWorkbook.Worksheets("Missing")
        Set rng = .Range(.Range("B10"), .Cells(.Rows.Count, "B").End(xlUp))
        Set rng = rng.Offset(0, 10)
    End With

    Set found = rng.Find("", , , xlWhole)
    If Not found Is Nothing Then
        firstAddress = found.Address
        Do
            'SQL code entered here
            Set found = rng.FindNext(found)
        Loop While Not found.Address = firstAddress
    End If
End Sub

如果有大量数据,您可能会发现某些方法非常慢。这将比在列中的每个单元格中循环更快:

Sub test()
    Dim rng As Range, found As Range
    Dim firstAddress As String

    With ThisWorkbook.Worksheets("Missing")
        Set rng = .Range(.Range("B10"), .Cells(.Rows.Count, "B").End(xlUp))
        Set rng = rng.Offset(0, 10)
    End With

    Set found = rng.Find("", , , xlWhole)
    If Not found Is Nothing Then
        firstAddress = found.Address
        Do
            'SQL code entered here
            Set found = rng.FindNext(found)
        Loop While Not found.Address = firstAddress
    End If
End Sub

你有2个
下一个i
必须只有一个。使用倒置的
if
语句:
if Not ActiveCell.Value=”“然后“此处输入SQL代码”
您得到了2个
下一个i
必须只有一个。使用倒置的
if
语句:
if Not ActiveCell.Value=”“然后“在此输入SQL代码”
@Carlos80您的“欢迎,现在您可以通过单击我的答案左侧的灰色复选标记(它将变为绿色)来标记为“答案”完成-再次感谢您@Carlos80欢迎您,现在您可以通过单击我的答案左侧的灰色复选标记(将变为绿色)来标记为“答案”完成-再次感谢您!