簡體   English   中英

如何使用 VBA 選擇帶有 Range 的整個 Excel 表?

[英]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 現在是包含整個工作表的范圍對象

你有幾個選擇:

  1. 使用 UsedRange 屬性
  2. 找到最后使用的行和列
  3. 使用下移和右移的模仿

我個人大部分時間使用“使用范圍”並找到最后一行和最后一列方法。

以下是使用 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

這段代碼在做什么:

  1. 查找包含任何值的最后一個單元格
  2. 選擇單元格(1,1)一直到最后一個單元格

只要數據是連續的,另一種選擇范圍內所有單元格的方法是使用Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select

我建議錄制一個宏,就像在這篇文章中找到的一樣;

用於過濾記錄的 Excel VBA 宏

但是,如果您要查找數據的結尾而不是必需的工作簿的結尾,如果數據的開頭和結尾之間沒有空單元格,我經常使用這樣的方法;

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM