30

我在 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 中有没有办法获取文档中最后一个单元格的位置?

4

11 回答 11

29

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

于 2013-07-30T19:17:40.973 回答
23

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

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

于 2013-07-30T19:11:25.820 回答
15

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

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

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

于 2015-04-15T11:47:36.277 回答
8

你有几个选择:

  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)到最后一个单元格
于 2013-07-30T20:32:31.693 回答
3

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

于 2019-03-29T19:38:38.273 回答
1

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

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 设为列表示。

于 2013-07-30T19:25:29.693 回答
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
于 2019-03-16T04:29:18.167 回答
1
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)
于 2017-03-14T20:57:38.930 回答
1

我发现 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
于 2019-05-02T19:38:08.380 回答
0

也许这可能有效:

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

于 2014-10-31T18:38:52.420 回答
0

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

Sub find_last_row()
    Range("A76").Select
    Range(Selection, Selection.End(xlDown)).Select
End Sub
于 2015-08-07T12:40:39.627 回答