27

这是我非常困惑的一个查询。因为我已经找了很多次了,但我总是找到与查找最后使用或第一个非空单元格相关的代码。尝试以下代码。差异代码已由“偶数”一词分隔

iRow = Worksheets("Sheet1").Cells(Rows.Count,1).End(XlUp).Row 

甚至

Sub LastCellBeforeBlankInColumn()

Range("A1").End(xldown).Select

End Sub

甚至

查找列中最后使用的单元格:

Sub LastCellInColumn()

Range("A65536").End(xlup).Select

End Sub

甚至

查找行中空白之前的最后一个单元格:

Sub LastCellBeforeBlankInRow()

Range("A1").End(xlToRight).Select

End Sub

甚至

查找一行中最后使用的单元格:

Sub LastCellInRow()

Range("IV1").End(xlToLeft).Select

End Sub

甚至

Worksheets("Sheet1").Range("A1").End(xlDown).Row + 1

甚至

LastRow = Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("SheetName").Range("A" & LastRow).Paste

甚至

Dim FirstBlankCell as Range
Set FirstBlankCell=Range("A" & rows.Count).end(xlup).offset(1,0)
FirstBlankCell.Activate

'Find the last used row in a Column: column A in this example
Dim LastRow As Long
Dim NextRow As Long
With ActiveSheet
    LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
End With
NextRow = LastRow + 1
4

14 回答 14

19

如果您要做的只是选择给定列中的第一个空白单元格,您可以尝试一下:

代码:

Public Sub SelectFirstBlankCell()
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
    Dim currentRowValue As String

    sourceCol = 6   'column F has a value of 6
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

    'for every row, find the first blank cell and select it
    For currentRow = 1 To rowCount
        currentRowValue = Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
            Cells(currentRow, sourceCol).Select
        End If
    Next
End Sub

选择之前 - 要选择的第一个空白单元格:

在此处输入图像描述

选择后:

在此处输入图像描述

于 2013-02-19T16:09:49.630 回答
17

如果您要做的只是选择给定列中的第一个空白单元格,您可以尝试一下:

Range("A1").End(xlDown).Offset(1, 0).Select

如果您相对于您选择的列使用它,则此方法有效:

Selection.End(xlDown).Offset(1, 0).Select
于 2015-11-20T14:16:55.890 回答
16

万一有人像我一样偶然发现了这个……

查找列中的第一个空白单元格(我正在使用 D 列但不想包含 D1)

NextFree = Range("D2:D" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
Range("D" & NextFree).Select

NextFree 只是一个名字,如果你愿意,你可以使用香肠。

于 2014-06-25T13:02:19.257 回答
9

Sam 的代码很好,但我认为它需要一些更正,

Public Sub SelectFirstBlankCell()
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
    Dim currentRowValue As String

    sourceCol = 6   'column F has a value of 6
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

    'for every row, find the first blank cell and select it
    For currentRow = 1 To rowCount
        currentRowValue = Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
            Cells(currentRow, sourceCol).Select
            Exit For 'This is missing...
        End If
    Next
End Sub

谢谢

于 2014-04-02T12:52:22.257 回答
7

如果您正在寻找一个班轮(不包括名称和评论)试试这个

Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Name")

    'find first empty cell in column F (coming up from the bottom) and return row number
iRow = ws.Range("F:F").Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
于 2016-08-13T01:14:04.387 回答
2

我对每个人的代码进行了一些修改,将其制成一个函数,使其更快(数组),并添加了参数:

Public Function FirstBlankCell(Optional Sh As Worksheet, Optional SourceCol As Long = 1, Optional ByVal StartRow& = 1, Optional ByVal SelectCell As Boolean = False) As Long
Dim RowCount As Long, CurrentRow As Long
Dim CurrentRowValue As String
Dim Data()
If Sh Is Nothing Then Set Sh = ActiveSheet

With Sh

    rowCount = .Cells(.Rows.Count, SourceCol).End(xlUp).Row
    Data = .Range(.Cells(1, SourceCol), .Cells(rowCount, SourceCol)).Value2

    For currentRow = StartRow To RowCount
        If Data(currentRow, SourceCol) = vbNullString Then
            If SelectCell Then .Cells(currentRow, SourceCol).Select
            'if selection is out of screen, intead of .select , use : application.goto reference:=.cells(...), scroll:= true
            FirstBlankCell = currentRow
            Exit For
        End If
    Next

End With ' Sh

Erase Data
Set Sh = Nothing
End Function
于 2016-07-05T15:51:21.950 回答
2

这是一种非常快速和干净的方式。它还支持空列,因为上面的答案都不适用于空列。

用法:SelectFirstBlankCell("F")

Public Sub SelectFirstBlankCell(col As String)

    Dim i As Integer

    For i = 1 To 10000
        If Range(col & CStr(i)).Value = "" Then
            Exit For
        End If
    Next i

    Range(col & CStr(i)).Select
End Sub
于 2018-05-02T14:26:32.457 回答
1
Public Sub SelectFirstBlankCell()
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
    Dim currentRowValue As String

    sourceCol = 6   'column F has a value of 6
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

    'for every row, find the first blank cell and select it
    For currentRow = 1 To rowCount
        currentRowValue = Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
            Cells(currentRow, sourceCol).Select
        End If
    Next
End Sub

如果任何一列连续包含多个空单元格,则此代码将无法正常工作

于 2015-04-27T06:37:15.670 回答
1

我在尝试执行类似任务时发现了这个线程。最后,我用

Range("F:F").SpecialCells(xlBlanks).Areas(1)(1).Select

只要在指定范围和工作表使用范围的交集处有一个空白单元格,它就可以正常工作。

area 属性不需要查找范围中的绝对第一个空白,但对于查找后续的非连续空白很有用。

于 2019-11-16T12:36:18.190 回答
0

我认为Do Until-loop 在这里更干净、更短、更合适:

Public Sub SelectFirstBlankCell(col As String)
    Dim Column_Index as Integer
    Dim Row_Counter as 

    Column_Index = Range(col & 1).Column
    Row_Counter = 1

    Do Until IsEmpty(Cells(Row_Counter, 1))
        Row_Counter = Row_Counter + 1
    Loop

    Cells(Row_Counter, Column_Index).Select
于 2018-09-29T19:30:41.143 回答
0

还有另一种方法可以忽略非空单元格之前的所有空单元格,并从第一列的末尾选择最后一个空单元格。列应该用它们的编号来解决,例如。列“A”= 1。

With ThisWorkbook.Sheets("sheet1")

        .Cells(.Cells(.Cells.Rows.Count, 1).End(xlUp).Row + 1, 1).select

End With

接下来的代码和上面的完全一样,但是可以更好地理解。

i = ThisWorkbook.Sheets("sheet1").Cells.Rows.Count

j = ThisWorkbook.Sheets("sheet1").Cells(i, 1).End(xlUp).Row

ThisWorkbook.Sheets("sheet1").Cells(j + 1, 1) = textbox1.value
于 2019-09-11T06:40:50.960 回答
0

NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1

于 2020-04-30T22:19:24.180 回答
0

我刚刚写了这个单行来选择基于选定单元格的列中找到的第一个空单元格。仅适用于选定单元格的第一列。根据需要修改

Selection.End(xlDown).Range("A2").Select
于 2020-08-06T19:10:52.857 回答
0

.Find 有很多选项,如果在您的范围内没有找到空单元格,则返回 Nothing:

With Range("F:F")
     .Find("", .Rows(.Rows.Count), xlFormulas, , xlByRows, xlNext).Select
End With

.Find 默认从范围内的第一个单元格开始搜索,因此它通常从第 2 行开始。如果 After 参数是范围内的最后一个单元格,它将从第 1 行开始查找第一个空单元格。那是因为搜索结束了。

于 2021-09-08T01:34:19.087 回答