Вам нужно прочитать код и попытаться разобраться в нем, и ответ придет к вам.
Разбей то, что ты уже знаешь.
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