我在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中有没有办法获取文档中最后一个单元格的位置?
谢谢!
答案 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)
你有几个选择:
我个人使用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
此代码正在做什么:
答案 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