Excel VBA代码选择非空单元格

时间:2016-10-10 21:36:12

标签: vba excel-vba spreadsheet excel

在Excel中,让我在B2到B7和C2到C7中有数据。在VBA中,我可以编写一个宏来选择它:

authorization:'enabled'

如何重写代码以便自动选择非空的单元格? 如果我删除单元格B7和C7中的数据,那么我希望宏只选择范围(B2:C6) 如果我将数据添加到Cell B8和C8,那么我希望宏选择Range(B2:C8)。

我的数据将始终以B2,C2开头,而且数据之间没有任何可用空间。

4 个答案:

答案 0 :(得分:5)

您的数据始终从B2,C2开始,中间没有空单元格?如果是这样,你可以将变量设置为"最后填充的行"

lastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Range("B2:C" & lastRow).Select

并定义从B2到C"最后一行"

的范围

答案 1 :(得分:2)

使用循环:

Sub qwerty()
    Dim rng As Range, r As Range, rSel As Range

    Set rng = Range("B2:C7")
    Set rSel = Nothing

    For Each r In rng
        If r.Value <> "" Then
            If rSel Is Nothing Then
                Set rSel = r
            Else
                Set rSel = Union(rSel, r)
            End If
        End If
    Next r
    If Not rSel Is Nothing Then rSel.Select
End Sub

如果要扩展正在测试的区域,请使用:

Range("B2:C7").CurrentRegion

答案 2 :(得分:0)

使用选择对象的“ SpecialCells”功能

Sub Macro1()
    Range("B2:C7").Select
    For Each self in Selection.SpecialCells(xlCellTypeConstants)
        Debug.Print(self)
    Next
End Sub

答案 3 :(得分:0)

为了获得所有非空白单元格,您还必须收集包含公式的单元格:

Function getNonBlankCells(myRange As Range) As Range
    Dim tmpRange As Range, resultRange As Range
    
    Set resultRange = Nothing
    Set tmpRange = myRange.Cells.SpceialCells(xlCellTypeConstants)
    If Not tmpRange Is Nothing Then Set resultRange = tmpRange
    
    Set tmpRange = myRange.Cells.SpceialCells(xlCellTypeFormulas)
    If Not tmpRange Is Nothing Then
        If resultRange Is Nothing Then
            Set resultRange = tmpRange
        Else
            Set resultRange = Union(resultRange, tmpRange)
        End If
    End If

    Set getNonBlankCells = resultRange
End Function