首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在工作表上查找第一个完全为空的行

在工作表上查找第一个完全为空的行
EN

Stack Overflow用户
提问于 2016-06-02 06:59:55
回答 3查看 247关注 0票数 2

需要一个函数来返回工作表中填充了空闲单元格的第一个完全空的行(没有值,没有公式,没有空白)。不需要填写任何一列。

我试过了,但我甚至可以编译它:

代码语言:javascript
复制
Public Donations As Worksheet
Set Donations = Sheets("Sheet2")

Function getEmptyRow() As Long
   Dim lastCol As Long, lastRow As Long, maxRow As Long
   Dim col As Long
   Dim r As Variant

   lastCol = Donations.Cells(1, Columns.Count).End(xlToLeft).Column
   For col = 1 To lastCol Step 1
      lastRow = Donations.Cells(Rows.Count, col).End(xlUp).row
      maxRow = Application.WorksheetFunction.max(maxRow, lastRow)
   Next col
   getEmptyRow = maxRow + 1
End Function
EN

回答 3

Stack Overflow用户

发布于 2016-06-02 07:01:14

使用EntireRow (让我告诉您,这是非常有用的)并从A1开始逐行计数是一种非常基本的方法。

这将在“即时”窗口中告诉您:

代码语言:javascript
复制
Sub findemptyrow()                       '''Psuedo Code
Application.ScreenUpdating = False       'turns off annoying blinky
Range("a1").Activate                     'start at beginning   
While a <> 1                             'keep going
  If Application.CountA(ActiveCell.EntireRow) = 0 Then  'is it blank?
  Debug.Print "Row " & (ActiveCell.Row) & " is blank."   'it is
  a = 1                                   'stop going  
  End If
  ActiveCell.Offset(1).Activate           'next cell
Wend                                      'do it all over again  
Application.ScreenUpdating = True         'back to normal settings
End Sub

ScreenUpdating设为False会使速度更快,即使有10k行。

票数 3
EN

Stack Overflow用户

发布于 2016-06-02 07:59:16

Range.Find method可能是最方便的方法。查找通配符(What:=Chr(42)),从A1 (After:=.Cells(1, 1) )开始,向后搜索(SearchDirection:=xlPrevious),逐行搜索(SearchOrder:=xlByRows).Row),查看公式(LookIn:=xlFormulas),因为这将找到第一个值或公式;如果公式返回空字符串(""),则查看xlValues可能不正确。

代码语言:javascript
复制
Option Explicit
Public Donations As Worksheet

Sub test()
    Set Donations = Worksheets("Sheet2")
    Debug.Print getNextEmptyRow(Donations)
End Sub

Function getNextEmptyRow(ws As Worksheet)
    With ws.Cells
        getNextEmptyRow = .Find(What:=Chr(42), After:=.Cells(1, 1), LookIn:=xlFormulas, _
                                SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row + 1
    End With
End Function

不能在模块代码表的声明区域中设置Donations。在代码表的声明区域(顶部)声明公共变量,但在sub或函数中设置变量。

如果你想要‘下一个空行’,不要忘了在返回的行上加1。

票数 0
EN

Stack Overflow用户

发布于 2016-06-02 19:48:34

只是使用‘`Range’的SpecialCells方法的另一种选择:

代码语言:javascript
复制
Option Explicit

Sub Test()
    Debug.Print "Last row on Sheet1 is: " & FirstCompletelyEmptyRow(Sheet1)
End Sub

Function FirstCompletelyEmptyRow(ByRef wsTarget As Worksheet) As Long
    FirstCompletelyEmptyRow = wsTarget.Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37580130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档