2010-11-03 17 views
5

Me gustaría seleccionar al final de la hoja de trabajo, pero no debajo de lo que se usa/almacena. Podría tener 10.000 filas, pero ciertamente no tengo 65.536. No sabré con anticipación cuántas filas.Buscar la parte inferior de la hoja de cálculo de Excel en VBA

En Excel (en las versiones recientes, de todos modos, Excel 97 no fue tan amable) puede presionar Ctrl + Fin para ir a la última fila y columna. Me gustaría la misma funcionalidad.

Respuesta

3

El La forma más simple es comenzar desde abajo y buscar la última fila que contenga algo:
Rango ("a65536"). Fin (xlup) .row

+0

A menos que la hoja se llene hasta la 65536a fila .. que en 99% de los casos, no es el caso. Haría esto sobre rango ("A1) .end (xlDown) o similar –

+3

Si baja XL se detiene en la primera celda vacía: a menudo hay más datos después de una celda vacía. Si comienza en la parte inferior y sube usted no tiene este problema –

2

Eso es elemental:

Selection.End(xlDown).Select 

(descubrió esto pulsando CTRL + FIN durante la grabación de una macro.)

+0

Tiene que tener cuidado, si tiene una fila vacía a veces solo seleccionará hasta e ignorará todo después. Por lo general, agarraba la hilera allí, revisaba las siguientes 2-3 celdas y, si no se encontraba ninguna coincidencia, acéptala; de lo contrario, encontraría el 'final' de esa área y el bucle hasta que tuviera 2 o 3 espacios en blanco consecutivos. – pinkfloydx33

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

He usado esta previamente

'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

Esta función devuelve ninguna fila de la columna max y max en la hoja de trabajo con un cierto contenido. tal vez sea útil para sbdy. por supuesto, esto es muy lento, pero por lo general no tenemos que verificar todas las filas y columnas, por lo que hay que ajustar los bucles.

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 
Cuestiones relacionadas