如何在VBA中使用Macro选择整个Excel工作表?

时间:2013-07-30 18:50:45

标签: excel excel-vba excel-2010 vba

我在c#中找到了类似的解决方案... 见下面的链接

How to Select all the cells in a worksheet in Excel.Range object of c#?

有人在VBA中有一个片段吗?我对VBA并不熟悉,所以这会有所帮助。这是我到目前为止所得到的......

我通常使用“ctrl + shift over 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中有没有办法获取文档中最后一个单元格的位置?

谢谢!

11 个答案:

答案 0 :(得分:25)

我相信你想要找到A1和周围细胞的当前区域 - 不一定是纸张上的所有细胞。 如果是这样 - 只需使用...... 的范围( “A1”)。CurrentRegion

答案 1 :(得分:19)

您只需使用cells.select选择工作表中的所有单元格即可。您可以通过Range(Cells.Address)来获取有效地址。

如果您想查找已进行格式更改或输入值的最后Used Range,可以致电ActiveSheet.UsedRange并从那里选择。希望有所帮助

答案 2 :(得分:8)

您可以将所有单元格用作对象:

Dim x as Range
Set x = Worksheets("Sheet name").Cells

X现在是一个包含整个工作表的范围对象

答案 3 :(得分:5)

你有几个选择:

  1. 使用UsedRange属性
  2. 找到最后一行和列使用
  3. 使用模拟向下移动并向右移动
  4. 我个人使用Used Range并在大多数时间找到最后一行和列方法。

    以下是使用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)一直到最后一个单元格

答案 4 :(得分:1)

我建议录制一个宏,就像在这篇文章中找到的那样;

Excel VBA macro to filter records

但是如果您希望找到数据的结尾而不是必要的工作簿结尾,如果数据的开头和结尾之间没有空单元格,我经常使用这样的内容;

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)这样的东西。选择,如果你把C作为列表示。

答案 5 :(得分:1)

这是我所使用的,我知道它可以进行一些完善,但我认为它将对其他人有所帮助...

''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

答案 6 :(得分:0)

也许这可行:

Sh.Range(" A1",Sh.Range(" A"& Rows.Count).End(xlUp))

答案 7 :(得分:0)

参考第一个问题,我正在研究相同的问题。 记录宏的结果是,从选择单元格A76开始:

Sub find_last_row()
    Range("A76").Select
    Range(Selection, Selection.End(xlDown)).Select
End Sub

答案 8 :(得分:0)

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)

答案 9 :(得分:0)

只要数据是连续的,选择范围内所有单元格的另一种方法是使用Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select

答案 10 :(得分:0)

我发现工作表“ .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