버튼이 있는 Excel 워크시트가 있습니다.
사용된 범위() 함수를 호출하면 반환되는 범위에 버튼 부분이 포함됩니다.
데이터가 포함된 실제 사용 범위만 가져올 수 있는 방법이 있나요?
어떤 종류의 버튼이든 폼 컨트롤이나 ActiveX 컨트롤이 사용 범위에 영향을 미쳐서는 안 됩니다.
엑셀에서 사용된 범위를 잘 추적하지 못하는 것은 알려진 문제입니다. VBA를 통해 사용된 범위를 참조하면 현재 사용된 범위로 값이 재설정됩니다. 따라서 이 하위 프로시저를 실행해 보세요:
Sub ResetUsedRng()
Application.ActiveSheet.UsedRange
End Sub
실패하면 일부 서식이 남아 있을 수 있습니다. 마지막 행 이후의 모든 셀을 지우거나 삭제해 보세요.
위의 내용도 참조하세요:
마지막으로 사용한 셀을 찾는 다른 방법:
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
이 그다지 신뢰할 수 없는 이유도 설명되어 있습니다).
여기's 한 쌍의 기능을 반환 마지막 행과 열의 워크시트를 기반으로,Reafidy's 솔루션이다.
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)
이 기능을 제공하는 모든 4 개의 한계 범위를 사용:
Function FindUsedRangeLimits()
Set Sheet = ActiveSheet
Sheet.UsedRange.Select
' Display the range's rows and columns.
row_min = Sheet.UsedRange.Row
row_max = row_min + Sheet.UsedRange.Rows.Count - 1
col_min = Sheet.UsedRange.Column
col_max = col_min + Sheet.UsedRange.Columns.Count - 1
MsgBox "Rows " & row_min & " - " & row_max & vbCrLf & _
"Columns: " & col_min & " - " & col_max
LastCellBeforeBlankInColumn = True
End Function