【问题标题】:How do you select the entire excel sheet with Range using VBA?如何使用 VBA 选择带有 Range 的整个 Excel 工作表?
【发布时间】:2020-01-28 00:49:25
【问题描述】:

我在 c#How to Select all the cells in a worksheet in Excel.Range object of 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 中有没有办法获取文档中最后一个单元格的位置?

【问题讨论】:

    标签: excel vba excel-2010


    【解决方案1】:

    我相信您想找到 A1 和周围单元格的当前区域 - 不一定是工作表上的所有单元格。 如果是这样 - 只需使用... Range("A1").CurrentRegion

    【讨论】:

    • 有趣的是,如果您刚刚将工作表复制到新工作簿中,Range("A1").CurrentRegion.Address 返回“A1”,而不是工作表。我不得不改用 Chanca 的 Range(Cells.Address) 方法。
    【解决方案2】:

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

    如果您想找到最后一个Used Range,您在其中进行了一些格式更改或输入了一个值,您可以调用ActiveSheet.UsedRange 并从那里选择它。希望有帮助

    【讨论】:

    • 如果你只想要范围,你甚至不需要Cells.Select。仅Cells 就可以为您提供范围。
    • 嗯,这让我的工作簿崩溃了,哈哈,我希望它有效,而且资源密集型可笑。运行前保存!
    【解决方案3】:

    您可以像这样使用所有单元格作为对象:

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

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

    【讨论】:

      【解决方案4】:

      你有几个选择:

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

      我个人大部分时间都使用 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) 一直到最后一个单元格

      【讨论】:

      • 嗨,是的,无论您之间有多少空行,这都会捕获最后使用的单元格 =]
      • 应该是Dim rngTemp As Range
      • 是的,我通常使用ActiveSheet.UsedRange.Select 来选择所有使用的单元格(包括范围内的任何空白单元格)。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        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).Select 之类的东西,如果您将 C 设为列表示。

        【讨论】:

        • 与我向 Derek 提出的相同澄清。这会捕捉到我在最后一行之间有一个空行的情况吗?
        • 不,当它到达一个空单元格时会停止。
        【解决方案7】:
        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)
        

        【讨论】:

          【解决方案8】:

          这是我使用的,我知道它可以使用一些完善,但我认为它会帮助其他人......

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

          【讨论】:

            【解决方案9】:

            我发现 Worksheet ".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
            

            【讨论】:

              【解决方案10】:

              也许这可能有效:

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

              【讨论】:

                【解决方案11】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2018-11-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-12-28
                  • 2020-05-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多