Получение фактического использования диапазона

У меня есть рабочий лист Excel с кнопкой.

Когда я вызываю функцию usedRange (), возвращаемый диапазон включает в себя часть кнопки.

В любом случае, я могу просто получить фактический диапазон использования, содержащий данные?

Какая кнопка, ни управление формами, ни элемент управления ActiveX не должны влиять на используемый диапазон.

Это известная проблема, что excel не очень хорошо отслеживает использованный диапазон. Любая ссылка на используемый диапазон через VBA приведет к сбросу значения в текущий используемый диапазон. Поэтому попробуйте выполнить следующую процедуру:

Sub ResetUsedRng() Application.ActiveSheet.UsedRange End Sub 

В противном случае у вас может быть некоторое форматирование, висящее вокруг. Попробуйте очистить / удалить все ячейки после последней строки.

Что касается вышеизложенного, см. Также:

Совет разработчика Excel

Другой способ найти последнюю использованную ячейку:

  Dim rLastCell As Range Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

Измените направление поиска, чтобы найти первую использованную ячейку.

Readify сделал очень полный ответ. Тем не менее, я хотел добавить инструкцию End , вы можете использовать:

Найдите последнюю использованную ячейку перед пробелом в столбце:

 Sub LastCellBeforeBlankInColumn() Range("A1").End(xldown).Select End Sub 

Найдите самую последнюю использованную ячейку в столбце:

 Sub LastCellInColumn() Range("A" & Rows.Count).End(xlup).Select End Sub 

Найдите последнюю ячейку перед пробелом в строке:

 Sub LastCellBeforeBlankInRow() Range("A1").End(xlToRight).Select End Sub 

Найдите самую последнюю использованную ячейку в строке:

 Sub LastCellInRow() Range("IV1").End(xlToLeft).Select End Sub 

См. Здесь дополнительную информацию (и объяснение, почему xlCellTypeLastCell не очень надежна).

Вот пара функций для возврата последней строки и столбца рабочего листа на основе решения Reafidy выше.

  Function LastRow(ws As Object) As Long Dim rLastCell As Object On Error GoTo ErrHan Set rLastCell = ws.Cells.Find("*", ws.Cells(1, 1), , , xlByRows, _ xlPrevious) LastRow = rLastCell.Row ErrExit: Exit Function ErrHan: MsgBox "Error " & Err.Number & ": " & Err.Description, _ vbExclamation, "LastRow()" Resume ErrExit End Function Function LastCol(ws As Object) As Long Dim rLastCell As Object On Error GoTo ErrHan Set rLastCell = ws.Cells.Find("*", ws.Cells(1, 1), , , xlByColumns, _ xlPrevious) LastCol = rLastCell.Column ErrExit: Exit Function ErrHan: MsgBox "Error " & Err.Number & ": " & Err.Description, _ vbExclamation, "LastRow()" Resume ErrExit End Function 
 Public Sub FindTrueUsedRange(RowLast As Long, ColLast As Long) Application.EnableEvents = False Application.ScreenUpdating = False RowLast = 0 ColLast = 0 ActiveSheet.UsedRange.Select Cells(1, 1).Activate Selection.End(xlDown).Select Selection.End(xlDown).Select On Error GoTo -1: On Error GoTo Quit Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Activate On Error GoTo -1: On Error GoTo 0 RowLast = Selection.Row Cells(1, 1).Activate Selection.End(xlToRight).Select Selection.End(xlToRight).Select Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Activate ColLast = Selection.Column Quit: Application.ScreenUpdating = True Application.EnableEvents = True On Error GoTo -1: On Error GoTo 0 End Sub 

Я использую следующий код vba, чтобы определить весь диапазон используемых строк для рабочего листа, чтобы затем сократить выбранный диапазон столбца:

  Set rUsedRowRange = Selection.Worksheet.UsedRange.Columns( _ Selection.Column - Selection.Worksheet.UsedRange.Column + 1) 

Также работает наоборот:

  Set rUsedColumnRange = Selection.Worksheet.UsedRange.Rows( _ Selection.Row - Selection.Worksheet.UsedRange.Row + 1) 
  • «Не удается найти проект или библиотеку» для стандартных функций VBA
  • Как найти последнюю строку, содержащую данные на листе Excel с макросом?
  • Как удалить все не буквенно-цифровые символы из строки, кроме периода и пробела в excel?
  • Как удалить несколько строк без цикла в Excel VBA
  • Excel VBA - функция QueryTable AfterRefresh, которая не вызывается после завершения обновления
  • Сохранение листа Excel в CSV-файлах с именем файла + имя листа с использованием VB
  • Excel VBA - добавление элемента в конец массива
  • Workbooks.Open метод в VBA
  • Запуск макроса Excel из внешнего Excel с помощью VBScript из командной строки
  • Сравните двойную точность в задаче точности VBA
  • Скопировать код VBA с листа в одной книге на другую?
  • Давайте будем гением компьютера.