2010-11-03 95 views
5

我想選擇工作底部的底部,但不要低於使用/存儲的底部。我可能有10,000行,但我當然沒有65,536行。我不會提前知道有多少行。在VBA中查找Excel工作底部的底部

在Excel本身(在最近的版本中,無論如何; Excel 97並不那麼友善),您可以按Ctrl + End將其帶到最後一行和一列。我想要相同的功能。

回答

3

的最簡單的方法是從底部開始,並查找包含內容的最後一行:
Range(「a65536」)。end(xlup).row

+0

除非表單填充到第65536行,在99%的情況下,情況並非如此。我會這樣做超過範圍(「A1).end(xlDown)或類似 – 2010-11-04 03:11:29

+3

如果你停下來XL停在第一個空單元格:經常有一個空單元格後的數據更多,如果你從底部開始往上你沒有這個問題。 – 2010-11-04 08:08:23

2

這是基本的:

Selection.End(xlDown).Select 

(按CTRL + END錄製宏發現了這一點。)

+0

但是你必須小心,如果你有一個空行有時它只會選擇它並忽略所有事後。我通常會抓住它到達的那一排,檢查接下來的2-3個單元格,如果沒有找到匹配,接受它,否則我會找到該區域的'結束'並循環,直到我有2或3個連續的空白。 – pinkfloydx33 2010-11-03 22:59:11

2
Public Sub Blank_Row_Remover() ' Start of Macro Code 

'Deletes the Entire Row within the Selection if _ 
Some of the Cells Within the Selection Contain No Data. 

Dim Start_Cell, End_Cell, Data_Info, End_Column, This_Column As Variant 

Application.ScreenUpdating = False 
Application.StatusBar = "Please Stand By, ('Removing Blank Rows...' ~ Macro In Progress)..." 

    Call Data_Info_Selection(Start_Cell, End_Cell, Data_Info, End_Column, This_Column) ' Direct Method 

    For Each Cell In Selection 
     Cell.Formula = Replace(Cell.Formula, Cell.Formula, Trim(Cell.Formula)) {Rids Extra Spaces} 
     'If InStr(Cell.Value, "Labels:") Then Cell.EntireRow.Clear 'Searching for a Particular String to Remove a Row 
     'If InStr(Cell.Value, " ") Then Cell.EntireRow.Clear 'Searching for another Particular String to Remove a Row {Like 4 Spaces in a Cell that Keeps it from Reading as a Blank} 
    Next 
     On Error Resume Next 
      Selection.SpecialCells(xlBlanks).EntireRow.Delete 
     On Error GoTo 0 

    'Call Data_Info_Selection(Start_Cell, End_Cell, Data_Info, End_Column, This_Column) ' Direct Method 

Application.ScreenUpdating = True 
End Sub 
Public Function Data_Info_Selection(ByRef Start_Cell, End_Cell, Data_Info, End_Column, This_Column As Variant) 

Application.ScreenUpdating = False 
Application.StatusBar = "Please Stand By, ('Selecting Partial Columns' ~ Macro In Progress)..." 

Start_Cell = ActiveCell.Address 
Start_Cell_Text = Range(Start_Cell).Text 

Orginal_Start_Cell = Range(Start_Cell).Address 

If Start_Cell_Text = "" Then 
    Dim Cells As Range 
     For Each Cell In Selection.Cells 
      If Cell = "" Then 
       Start_Cell = Cell.Address 
      Else 
       Start_Cell = Cell.Address 
       Exit For 
      End If 
     Next 
End If 

    This_Column = Mid(Start_Cell, 2, 1) 'ColumnNum = ActiveCell.Column 
     If Range(Start_Cell).Text = "" Then 
      End_Column = This_Column & ActiveCell.Row 
      End_Cell = Range(End_Column).Address 
     Else 
      End_Column = This_Column + "65536" 
      End_Cell = Range(End_Column).End(xlUp).Address 
      Start_Cell = Range(Orginal_Start_Cell).Address 
     End If 

    Data_Info = Range(Start_Cell, End_Cell).Address 
    Range(Data_Info).Select 

End Function 
Public Sub Select_Partial_Data_Start_Cell() ' (This Seems to Work and is Cleaner and Simplier) 

Application.ScreenUpdating = False 
Application.StatusBar = "Please Stand By, ('Selecting Partial Data' ~ Macro In Progress)..." 

Dim myLastRow As Long 
Dim myLastColumn As Long 

    Start_Cell = ActiveCell.Address 
    On Error Resume Next 
     myLastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row 
     myLastColumn = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column 
     myLast_Cell = Cells(myLastRow, myLastColumn).Address 
    myRange = Start_Cell & ":" & myLast_Cell 
    'If InStr(1, myLast_Cell, "104876", 1) Then myLast_Cell = "$F$1105" 

Range(myRange).Select 
Application.ScreenUpdating = True 

End Sub' End of Macro Code 
0

我用這個之前

'This finds the last row in thr worksheet 
LR = Cells(Rows.Count, 18).End(xlUp).Row 
Range(Cells(LR, 1), Cells(LR, 35)).Select 
0

該函數返回無最大行和最大列的一些內容的工作表。也許這對sbdy來說是有用的。當然這很慢,但通常我們不必檢查所有的行和列,因此必須調整循環。

Public Function content_area(shName As String) As Variant 
Dim res(1 To 2) As Integer 
Dim ark As Worksheet 

Set ark = ThisWorkbook.Sheets(shName) 
nCol = 0 
nRow = 0 

For i = 1 To ark.Columns.Count 
    temp = ark.Cells(ark.Cells(1, i).EntireColumn.Rows.Count, i).End(xlUp).Row 
    If temp > nCol Then nCol = temp 
Next 
For i = 1 To ark.Rows.Count 
    temp = ark.Cells(i, ark.Cells(i, 1).EntireRow.Columns.Count).End(xlToLeft).Column 
    If temp > nRow Then nRow = temp 
Next 

res(1) = nCol 
res(2) = nRow 

content_area = res 
End Function