求某个sheet中的有数据的最后一行的行号,最后一列的列数

本文提供了一系列实用的 VBA 代码片段,帮助您在 Excel 工作表中快速找到最后一行、最后一列及最后一个被使用的单元格。这些代码适用于查找特定列中的最后一个非空单元格、特定行中的最后一个非空单元格,以及整个工作表中的最后一个非空单元格。此外,还介绍了一种在数据列变化处插入新行的方法。
摘要由CSDN通过智能技术生成

Excel & VBa: find last row, column, cell in an Excel (work)sheet

 

The following page contains some usefull (general) vba code that can be used to find the last row, column and/or cell in an Excel (work)sheet.

 

原文来自:http://www.nijbo.net/index.php?option=com_content&task=view&id=14&Itemid=32

 

ExpandedBlockStart.gif Code
  1 Find the last used cell, before a blank in a Column:
  2 Sub LastCellBeforeBlankInColumn()
  3   Range("A1").End(xldown).Select
  4 End Sub 
  5 
  6 Find the very last used cell in a Column:
  7 Sub LastCellInColumn()
  8   Range("A65536").End(xlup).Select
  9 End Sub 
 10   
 11 Find the very last used cell in a Column: 
 12 Sub LastCellInColumn()
 13   Range("A65536").End(xlup).Select
 14 End Sub
 15 
 16 Find the last cell, before a blank in a Row: 
 17 Sub LastCellBeforeBlankInRow()
 18   Range("A1").End(xlToRight).Select
 19 End Sub
 20 
 21 Find the very last used cell in a Row: 
 22 Sub LastCellInRow()
 23   Range("IV1").End(xlToLeft).Select
 24 End Sub
 25 
 26 Find the very last used cell on a Worksheet: 
 27 Sub Demo()
 28   Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select
 29 End Sub
 30 
 31   
 32 Find the last used Row on a Worksheet:
 33 Sub FindLastRow()
 34   Dim LastRow As Long
 35 
 36   If WorksheetFunction.CountA(Cells) > 0 Then
 37     'Search for any entry, by searching backwards by Rows.
 38     LastRow = Cells.Find(What:="*", After:=[A1], _
 39                          SearchOrder:=xlByRows, _
 40                          SearchDirection:=xlPrevious).Row
 41     MsgBox LastRow
 42   End If
 43 End Sub
 44 
 45 Find the last used Column on a Worksheet:
 46 Sub FindLastColumn()
 47   Dim LastColumn As Integer
 48   If WorksheetFunction.CountA(Cells) > 0 Then
 49     'Search for any entry, by searching backwards by Columns.
 50     LastColumn = Cells.Find(What:="*", After:=[A1], _
 51                             SearchOrder:=xlByColumns, _
 52                             SearchDirection:=xlPrevious).Column
 53     MsgBox LastColumn
 54   End If
 55 End Sub 
 56   
 57 Find the last used Cell on a Worksheet:
 58 Private Sub FindLastCell()
 59   Dim LastColumn As Integer
 60   Dim LastRow As Long
 61   Dim LastCell As Range
 62   If WorksheetFunction.CountA(Cells) > 0 Then
 63     'Search for any entry, by searching backwards by Rows.
 64     LastRow = Cells.Find(What:="*", After:=[A1], _
 65                          SearchOrder:=xlByRows, _
 66                          SearchDirection:=xlPrevious).Row
 67     'Search for any entry, by searching backwards by Columns.
 68     LastColumn = Cells.Find(What:="*", After:=[A1], _
 69                             SearchOrder:=xlByColumns, _
 70                             SearchDirection:=xlPrevious).Column
 71     MsgBox Cells(LastRow, LastColumn).Address
 72   End If
 73 End Sub  
 74   
 75 Add a row at each change in a column.
 76 Assume you have a long list of data and you want to insert a row at each change. While you could use a simple Loop this method is much faster. The Data must be sorted! 
 77   
 78 Option Explicit
 79 
 80 Private Sub InsertRowAtEachChange()
 81   Dim objRange As Excel.Range
 82 
 83   ''' On error goto the error handler defined in the lower part of this function.
 84   On Error GoTo ErrHandler
 85 
 86   ''' Ensure an entire Column is selected
 87   If Selection.Cells.Count <> 65536 Then
 88     Call MsgBox("You must select an entire column", vbCritical)
 89     End
 90   End If
 91   
 92   '''Set a range variable to all data in selected column
 93   Set objRange = Range(Selection.Cells(21), Selection.Cells(655361).End(xlUp))
 94 
 95   ''' Add a column for formulas
 96   With objRange
 97     .EntireColumn.Insert
 98     .Offset(0-1).FormulaR1C1 = "=IF(AND(NOT(ISNA(R[-1]C))," & _
 99                                  "R[-1]C[1]<>RC[1]),0,"""")"
100     ''' Convert to values
101     .Offset(0-1= .Offset(0-1).Value
102     ''' Set variable to 0
103     Set objRange = .Offset(0-1).SpecialCells(xlCellTypeConstants, xlNumbers)
104   End With
105    
106   ''' Add a row at each 0
107   If WorksheetFunction.CountIf(objRange, 0> 0 Then
108     Call objRange.EntireRow.Insert
109   End If
110   
111   ''' Reset variable for next formulas
112   Set objRange = Range(Selection.Cells(21), Selection.Cells(655361).End(xlUp))
113   
114   ''' Add the formula to add 0
115   objRange.FormulaR1C1 = "=IF(OR(RC[1]="""",R[-1]C[1]=""""),""""," & _
116                          "IF(RC[1]<>R[-1]C[1],0))"
117   ''' Convert to values
118   objRange = objRange.Value
119   
120   ''' Set variable to 0 cells if any
121   If WorksheetFunction.CountIf(objRange, 0> 0 Then
122     Set objRange = objRange.SpecialCells(xlCellTypeConstants, xlNumbers)
123     ''' Add a row at each 0
124     objRange.EntireRow.Insert
125   End If
126   
127   ''' Delete added Column
128   Call objRange.Columns(1).EntireColumn.Delete
129 
130   ''' Remove an instance
131   Set objRange = Nothing
132 
133   ''' Exit the Sub
134   Exit Sub
135     
136 ''' Define the subfunction for errorhandling.
137 ErrHandler:
138   ''' Error.
139   '''Call gobjLogFile.Error("ThisWorkbook, function : InsertRowAtEachChange", _
140                          "Description goes here", Err.Number, Err.Description)
141   
142   ''' Resume anyway.
143   Resume Next
144 
145 End Sub 
146 
147 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值