find第一个空白行,然后写入它

我需要find工作簿中的第一个空白行,并将信息写入(row,1)和(row,2)。 我觉得我现在很坚持

Function WriteToMaster(num, path) As Boolean 'Declare variables Dim xlApp As Excel.Application Dim wb As Workbook Dim ws As Worksheet Dim infoLoc As Integer Set xlApp = New Excel.Application Set wb = xlApp.Workbooks.Open("PATH OF THE DOC") Set ws = wb.Worksheets("Sheet1") 'Loop through cells, looking for an empty one, and set that to the Num Cells(1, 1).Select For Each Cell In ws.UsedRange.Cells If Cell.Value = "" Then Cell = Num MsgBox "Checking cell " & Cell & " for value." Next 'Save, close, and quit wb.Save wb.Close xlApp.Quit 'Resets the variables Set ws = Nothing Set wb = Nothing Set xlApp = Nothing 

非常感谢您的帮助。

如果你的意思是最后一行使用后的行号,你可以这样find它:

 Dim unusedRow As Long unusedRow = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row 

如果你的意思是一行后面的数据是空白的,那就变得更加复杂了。

这是我写的一个函数,它会给你所提供的工作表的第一行的实际行号。

 Function firstBlankRow(ws As Worksheet) As Long 'returns the row # of the row after the last used row 'Or the first row with no data in it Dim rw As Range For Each rw In ws.UsedRange.Rows If rw.Address = ws.Range(rw.Address).SpecialCells(xlCellTypeBlanks). _ Address Then firstBlankRow = rw.Row Exit For End If Next If firstBlankRow = 0 Then firstBlankRow = ws.Cells.SpecialCells(xlCellTypeLastCell). _ Offset(1, 0).Row End If End Function 

用法示例: firstblankRow(thisworkbook.Sheets(1))或传递任何工作表。

编辑:正如ooo指出,如果您的使用范围内没有空白单元格,这将会出错。

我会这样做。 短而甜蜜:)

 Sub test() Dim rngToSearch As Range Dim FirstBlankCell As Range Dim firstEmptyRow As Long Set rngToSearch = Sheet1.Range("A:A") 'Check first cell isn't empty If IsEmpty(rngToSearch.Cells(1, 1)) Then firstEmptyRow = rngToSearch.Cells(1, 1).Row Else Set FirstBlankCell = rngToSearch.FindNext(After:=rngToSearch.Cells(1, 1)) If Not FirstBlankCell Is Nothing Then firstEmptyRow = FirstBlankCell.Row Else 'no empty cell in range searched End If End If End Sub 

更新以检查第一行是否为空。

编辑:更新包括检查整个行是否为空

 Option Explicit Sub test() Dim rngToSearch As Range Dim firstblankrownumber As Long Set rngToSearch = Sheet1.Range("A1:C200") firstblankrownumber = FirstBlankRow(rngToSearch) Debug.Print firstblankrownumber End Sub Function FirstBlankRow(ByVal rngToSearch As Range, Optional activeCell As Range) As Long Dim FirstBlankCell As Range If activeCell Is Nothing Then Set activeCell = rngToSearch.Cells(1, 1) 'Check first cell isn't empty If WorksheetFunction.CountA(rngToSearch.Cells(1, 1).EntireRow) = 0 Then FirstBlankRow = rngToSearch.Cells(1, 1).Row Else Set FirstBlankCell = rngToSearch.FindNext(After:=activeCell) If Not FirstBlankCell Is Nothing Then If WorksheetFunction.CountA(FirstBlankCell.EntireRow) = 0 Then FirstBlankRow = FirstBlankCell.Row Else Set activeCell = FirstBlankCell FirstBlankRow = FirstBlankRow(rngToSearch, activeCell) End If Else 'no empty cell in range searched End If End If End Function 

更新

受到上面Daniel的代码的启发,事实上这是方式! 对我来说更有意思的是我所要做的实际工作,我创造了一个充满希望的全function来find工作表中的第一个空白行。 改进欢迎! 否则,这是去我的图书馆:)希望其他人也受益。

  Function firstBlankRow(ws As Worksheet) As Long 'returns the row # of the row after the last used row 'Or the first row with no data in it Dim rngSearch As Range, cel As Range With ws Set rngSearch = .UsedRange.Columns(1).Find("") '-> does blank exist in the first column of usedRange If Not rngSearch Is Nothing Then Set rngSearch = .UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks) For Each cel In rngSearch If Application.WorksheetFunction.CountA(cel.EntireRow) = 0 Then firstBlankRow = cel.Row Exit For End If Next Else '-> no blanks in first column of used range If Application.WorksheetFunction.CountA(Cells(.Rows.Count, 1).EntireRow) = 0 Then '-> is the last row of the sheet blank? '-> yeap!, then no blank rows! MsgBox "Whoa! All rows in sheet are used. No blank rows exist!" Else '-> okay, blank row exists firstBlankRow = .UsedRange.SpecialCells(xlCellTypeBlanks).Row + 1 End If End If End With End Function 

原始答复

要查找工作表中的第一个空白,请replace此部分的代码:

 Cells(1, 1).Select For Each Cell In ws.UsedRange.Cells If Cell.Value = "" Then Cell = Num MsgBox "Checking cell " & Cell & " for value." Next 

有了这个代码:

 With ws Dim rngBlanks As Range, cel As Range Set rngBlanks = Intersect(.UsedRange, .Columns(1)).Find("") If Not rngBlanks Is Nothing Then '-> make sure blank cell exists in first column of usedrange '-> find all blank rows in column A within the used range Set rngBlanks = Intersect(.UsedRange, .Columns(1)).SpecialCells(xlCellTypeBlanks) For Each cel In rngBlanks '-> loop through blanks in column A '-> do a countA on the entire row, if it's 0, there is nothing in the row If Application.WorksheetFunction.CountA(cel.EntireRow) = 0 Then num = cel.Row Exit For End If Next Else num = usedRange.SpecialCells(xlCellTypeLastCell).Offset(1).Row End If End With 

我知道这是一个较旧的线程,但是我需要编写一个函数,返回范围内的第一个空行。 我在网上find的所有代码实际上是search整行(甚至是范围之外的单元格)作为空行。 在search范围之外的范围内的数据正在触发使用过的行。 这在我看来是一个简单的解决scheme:

 Function FirstBlankRow(ByVal rngToSearch As Range) As Long Dim R As Range Dim C As Range Dim RowIsBlank As Boolean For Each R In rngToSearch.Rows RowIsBlank = True For Each C In R.Cells If IsEmpty(C.Value) = False Then RowIsBlank = False Next C If RowIsBlank Then FirstBlankRow = R.Row Exit For End If Next R End Function 
 ActiveSheet.Range("A10000").End(xlup).offset(1,0).Select 

很老的线程,但..我正在寻找一个“更容易”…一个较小的代码

我真的不明白上面的答案:D – 我是noob

但这应该做的工作。 (用于较小的纸张)

 Set objExcel = CreateObject("Excel.Application") objExcel.Workbooks.Add 

从下往上读取列1中的每个单元格,并在第一个空单元格停止

 intRow = 1 Do until objExcel.Cells(intRow, 1).Value = "" intRow = intRow + 1 Loop 

那么你可以写这样的信息

 objExcel.Cells(intRow, 1).Value = "first emtpy row, col 1" objExcel.Cells(intRow, 2).Value = "first emtpy row, col 2" 

等等…

然后我认识到它的VBA线程…大声笑

非常老的线程,但更简单的:)

 Sub firstBlank(c) 'as letter MsgBox (c & Split(Range(c & ":" & c).Find("", LookIn:=xlValues).address, "$")(2)) End Sub Sub firstBlank(c) 'as number cLet = Split(Cells(1, c).address, "$")(1) MsgBox (cLet & Split(Range(cLet & ":" & cLet).Find("", LookIn:=xlValues).address, "$")(2)) End Sub