[英]How do you select the entire excel sheet with Range using VBA?
我在 c# 如何在 Excel.Range 的 c# 對象中選擇工作表中的所有單元格中找到了這個問題的類似解決方案?
在 VBA 中執行此操作的過程是什么?
我通常通過使用“ctrl+shift over arrow, down arrow”來選擇整個單元格范圍來選擇數據。 例如,當我在宏中運行它時,它會編碼出 A1:Q398247930。 我需要它只是
.SetRange Range("A1:whenever I run out of rows and columns")
我可以在沒有宏的情況下輕松地自己完成,但我試圖將整個過程變成一個宏,而這只是其中的一部分。
Sub sort()
'sort Macro
Range("B2").Select
ActiveWorkbook.Worksheets("Master").sort.SortFields.Clear
ActiveWorkbook.Worksheets("Master").sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Master").sort
.SetRange Range("A1:whenever I run out of rows and columns")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
編輯:
還有其他部分我可能想使用相同的代碼,但范圍是“C3:行和列的結尾”。 VBA 中有沒有辦法獲取文檔中最后一個單元格的位置?
我相信您想找到 A1 和周圍單元格的當前區域 - 不一定是工作表上的所有單元格。 如果是這樣 - 只需使用... Range("A1").CurrentRegion
您可以簡單地使用cells.select
來選擇工作表中的所有單元格。 您可以通過說Range(Cells.Address)
來獲得有效地址。
如果您想找到最后一個Used Range
,您可以在其中進行一些格式更改或輸入值,您可以調用ActiveSheet.UsedRange
並從那里選擇它。 希望有幫助
您可以將所有單元格用作這樣的對象:
Dim x as Range
Set x = Worksheets("Sheet name").Cells
X 現在是包含整個工作表的范圍對象
你有幾個選擇:
我個人大部分時間使用“使用范圍”並找到最后一行和最后一列方法。
以下是使用 UsedRange 屬性的方法:
Sheets("Sheet_Name").UsedRange.Select
此語句將選擇工作表中所有使用的范圍,請注意,有時在刪除列和行時這不會很好地工作。
另一種方法是找到工作表中使用的最后一個單元格
Dim rngTemp As Range
Set rngTemp = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not rngTemp Is Nothing Then
Range(Cells(1, 1), rngTemp).Select
End If
這段代碼在做什么:
只要數據是連續的,另一種選擇范圍內所有單元格的方法是使用Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select
。
我建議錄制一個宏,就像在這篇文章中找到的一樣;
但是,如果您要查找數據的結尾而不是必需的工作簿的結尾,如果數據的開頭和結尾之間沒有空單元格,我經常使用這樣的方法;
R = 1
Do While Not IsEmpty(Sheets("Sheet1").Cells(R, 1))
R = R + 1
Loop
Range("A5:A" & R).Select 'This will give you a specific selection
數據結束后,您將剩下 R = 到行號。 這也可以用於列,然后你可以使用像 Cells(C , R).Select 這樣的東西,如果你把 C 作為列表示。
Sub SelectAllCellsInSheet(SheetName As String)
lastCol = Sheets(SheetName).Range("a1").End(xlToRight).Column
Lastrow = Sheets(SheetName).Cells(1, 1).End(xlDown).Row
Sheets(SheetName).Range("A1", Sheets(SheetName).Cells(Lastrow, lastCol)).Select
End Sub
與 ActiveSheet 一起使用:
Call SelectAllCellsInSheet(ActiveSheet.Name)
這是我使用的,我知道它可以使用一些完善,但我認為它會幫助其他人......
''STYLING''
Dim sheet As Range
' Find Number of rows used
Dim Final As Variant
Final = Range("A1").End(xlDown).Row
' Find Last Column
Dim lCol As Long
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set sheet = ActiveWorkbook.ActiveSheet.Range("A" & Final & "", Cells(1, lCol ))
With sheet
.Interior.ColorIndex = 1
End With
我發現工作表“.UsedRange”方法在許多情況下都可以很好地解決這個問題。 我遇到了截斷問題,這是“.CurrentRegion”方法的正常行為。 使用 [ Worksheets("Sheet1").Range("A1").CurrentRegion ] 不會產生我想要的結果,當工作表包含一列且行中有空格(並且需要空格)時。 在這種情況下,“.CurrentRegion”將在第一條記錄處被截斷。 我實施了一個變通方法,但最近發現了一個更好的變通方法; 請參閱下面的代碼,允許將整個集合復制到另一個工作表或識別實際地址(或僅行和列):
Sub mytest_GetAllUsedCells_in_Worksheet()
Dim myRange
Set myRange = Worksheets("Sheet1").UsedRange
'Alternative code: set myRange = activesheet.UsedRange
'use msgbox or debug.print to show the address range and counts
MsgBox myRange.Address
MsgBox myRange.Columns.Count
MsgBox myRange.Rows.Count
'Copy the Range of data to another sheet
'Note: contains all the cells with that are non-empty
myRange.Copy (Worksheets("Sheet2").Range("A1"))
'Note: transfers all cells starting at "A1" location.
' You can transfer to another area of the 2nd sheet
' by using an alternate starting location like "C5".
End Sub
也許這可能有效:
Sh.Range("A1", Sh.Range("A" & Rows.Count).End(xlUp))
關於第一個問題,我正在研究相同的問題。 我得到的結果是錄制宏,從選擇單元格 A76 開始:
Sub find_last_row()
Range("A76").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.