Найти дно листа Excel в VBA - PullRequest
       4

Найти дно листа Excel в VBA

5 голосов
/ 04 ноября 2010

Я хотел бы выбрать в нижней части листа, но не ниже того, что используется / хранится.У меня может быть 10000 строк, но у меня, конечно, нет 65 536.Я не буду знать заранее, сколько строк.

В самом Excel (в последних версиях, во всяком случае, Excel 97 не был так добр) вы можете нажать Ctrl + End, чтобы перейти к последней строкеколонка.Я хотел бы такую ​​же функциональность.

Ответы [ 6 ]

4 голосов
/ 04 ноября 2010

Самый простой способ - начать снизу и продолжить работу, чтобы найти последний ряд, содержащий что-то:
Range ( "a65536"). Конец (xlup) .row

3 голосов
/ 04 ноября 2010

Это элементарно:

Selection.End(xlDown).Select

(Чтобы узнать это, нажмите ctrl + end во время записи макроса.)

2 голосов
/ 03 ноября 2012
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
1 голос
/ 04 ноября 2010

Было бы безопаснее предположить пробелы и использовать что-то из XL: Как определить используемые сверху / снизу ячейки в разреженном массиве

0 голосов
/ 21 ноября 2014

Эта функция не возвращает ни строки max, ни столбца max на листе с некоторым содержанием. возможно это будет полезно для 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
0 голосов
/ 05 мая 2013

Я использовал это ранее

'This finds the last row in thr worksheet
LR = Cells(Rows.Count, 18).End(xlUp).Row
Range(Cells(LR, 1), Cells(LR, 35)).Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...