用VBA选择范围-卡住了

时间:2018-12-08 20:52:10

标签: excel vba excel-vba

我在VBA中的项目很少,并且停留在以下主题上。

我需要选择从搜索值到H列中第一个空单元格的范围。

所选范围应如下所示

在Excel中选择的范围:
Selected Range in Excel

我在A列中搜索了特定的值,如果发现它被设置为范围内的第一个单元格。 (有效)

然后我需要找到范围中的最后一个单元格,即最后一列中的第一个空单元格。

这是我发现并尝试使用的

Sub Button()

    Dim StringToFind As String

    StringToFind = Application.InputBox("Enter string to find", "Find string")

    Worksheets("SS19").Activate
    ActiveSheet.Range("A:A").Select

    Set cell = Selection.Find(What:=StringToFind, After:=ActiveCell, _
                    LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

    cell.Select

    With Worksheets("SS19")

        Set rr = .Range(ActiveCell, .Cells(.Rows.Count, "H").End(xlUp))

        With rr
            rr.Parent.Range(.Cells(1, "A"), .Cells(.Rows.Count, "H").End(xlUp).Offset(1, 0)).Select
        End With

    End With

    If cell Is Nothing Then
        Worksheets("SS19").Activate
        MsgBox "String not found"
    End If

我试图在先前选择的范围内搜索第一个空单元格,因此它不会搜索整个列,但不起作用。

2 个答案:

答案 0 :(得分:0)

尝试一下...

Dim StringToFind As String
StringToFind = Application.InputBox("Enter string to find", "Find string")

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

    With ws
        Dim findCel As Range
        Set findCel = .Range("A:A").Find(StringToFind, , , xlWhole, , , False, , False)

        Dim lRow As Long
        lRow = .Range(findCel.Address).Offset(, 7).End(xlDown).Row + 1

        Dim rr As Range
        Set rr = .Range("A" & findCel.Row & ":" & "H" & lRow)

        rr.Select
    End With

答案 1 :(得分:0)

我发现,使用工作表的匹配功能比Range.Find更容易搜索单个列。

Option Explicit

Sub Button()

    Dim stringToFind As String, m As Variant

    Worksheets("SS19").Activate
    stringToFind = Application.InputBox("Enter string to find", "Find string", Type:=xlTextValues)

    With Worksheets("SS19")

        m = Application.Match(stringToFind, .Range("A:A"), 0)

        If Not IsError(m) Then
            If Not IsEmpty(.Cells(m + 1, "H")) Then
                .Range(.Cells(m, "A"), .Cells(m, "H").End(xlDown).Offset(1)).Select
            Else
                .Range(.Cells(m, "A"), .Cells(m, "H").Offset(1)).Select
            End If
        End If

    End With
End Sub

如果H列的 m 行下的第一个单元格为空,则使用.End(xlDown)可能会出现问题,应对此进行检查,否则您可能会发现选择范围太远,可能所有一直到工作表的底部。检查电池是否为空将解决此潜在问题。