Excel VBA - выбрать все столбцы и строки после последнего занятого столбца и строки - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь выяснить код, который идентифицирует последний занятый столбец на листе, а затем удаляет все столбцы после этого. Я также пытаюсь выяснить код, который идентифицирует последнюю занятую строку в листе, а затем удалить все строки после этого.

Пока у меня есть идея, что мне нужно будет использовать функцию Rows.Count, но у меня возникают проблемы с тем, чтобы выбрать все строки после последней занятой строки. То же самое для столбцов ... Это то, что я придумал до сих пор, который идентифицирует только последнюю занятую строку. Кто-нибудь знает, как заставить его теперь выделять целые строки после этого? И аналогично для всей колонны? Я не могу понять код для выбора последнего занятого столбца, как я могу со строками ... Заранее спасибо

Ряды: Sheets("ppCopy").Cells(Rows.Count, 1).End(xlUp).Row

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

J Доу Вот код, который будет искать значение в любой ячейке любого столбца, а затем выбирать и удалять все строки после этого и делать то же самое для столбцов. Нет очень техник или что-то, но будет делать работу, а также дать вам некоторые идеи. Он также будет включать формулы, отображающие пустые ячейки.

Надеюсь, что это поможет.

Sub DeleteRowAndColumns ()

With ThisWorkbook.Sheets("ppCopy")
    'find any cell no empty in a row in any row
    .Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Offset(1, 0).EntireRow.Select
    'select all the rows
    .Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete ' clear all the rows
    'find the last value in any column
    .Cells.Find(What:="*", SearchOrder:=xlColumns, SearchDirection:=xlPrevious, LookIn:=xlValues).Offset(0, 1).EntireColumn.Select
    'select columns
    .Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete 'clear columns
End With

End Sub

0 голосов
/ 30 апреля 2018

Вам нужно прочитать код и попытаться разобраться в нем, и ответ придет к вам.

Разбей то, что ты уже знаешь.

Sheets("ppCopy").Cells(Rows.Count, 1).End(xlUp).Row

Rows.Count = Последняя доступная строка

End (xlUp) = переместиться вверх из последней доступной строки (Rows.Count) в последнюю использованную строку.

Как вы получаете столбец тогда?

Sheets("ppCopy").Cells(1, Columns.Count).End(xlToLeft).Column

Columns.Count = Последний доступный столбец

End (xlToLeft) = переместиться влево от последнего доступного столбца (Columns.Count) к последнему использованному столбцу.

Вот как удалить неиспользуемые строки и столбцы:

Sub deleteUnused()
    Dim lastRow As Long, lastColumn As Integer 'there are a lot of rows compared to columns
    Dim lastLetter As String, firstLetter As String
    Set wk = ThisWorkbook
    With wk.Sheets("Sheet1")
        'Get last used rows and columns based on valued from Column A and Row 1
        lastRow = .Cells(Excel.Rows.Count, 1).End(Excel.xlUp).Row
        lastColumn = .Cells(1, Excel.Columns.Count).End(Excel.xlToLeft).Column
        'Delete Rows
        .Rows("" & (lastRow + 1) & ":" & Excel.Rows.Count & "").EntireRow.Delete Shift:=xlUp
        'Delete columns, tricky because you need the Column Letters instead of the numbers
        lastColumn = lastColumn + 1
        firstLetter = Split(.Cells(, lastColumn).Address, "$")(1)
        lastLetter = Split(.Cells(, Excel.Columns.Count).Address, "$")(1)
        .Columns("" & firstLetter & ":" & lastLetter & "").EntireColumn.Delete Shift:=xlLeft
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...