宏选择格式化为具有动态大小原始数据转储的表

时间:2017-11-06 02:56:56

标签: excel vba excel-vba

我一直在努力做一个选择原始数据转储的宏。我是这样做的:

Range("A1").Select 'Start at A1
Range(Selection, Selection.End(xlDown)).Select 'Go all the way down
Range(Selection, Selection.End(xlToRight)).Select 'Go all the way to the rgt

由于xlDownxlToRight,它适用于不同规模的数据转储。我想这远远不是最佳的。

现在,我需要将该选择格式化为表格以生成数据透视表。

如何将该选择存储到变量或Variant中,然后在其他代码中使用它来格式化为表格?

好像我有VAR0和VAR1然后:

ActiveSheet.ListObjects.Add(xlSrcRange, Range(VAR0:VAR1), , xlYes).Name 
= _"Table1"

我正在学习VBA并使用宏录制器并使用一些数据进行播放。我真的很感激一些指点! :)

我正在使用Excel 2016。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以将变量设置为最后一行和最后一列,然后使用这些值来定义范围。有很多方法可以做到这一点,我确信人们会对各种方法有利有弊,但是如果你的数据布局得很好(没有空白行,空白列或空白单元格) ,我喜欢:

last_row = Worksheets("<worksheet name>").UsedRange.Rows.Count
last_col = Worksheets("<worksheet name>").UsedRange.Columns.Count

然后你的表格范围变为Range(Cells(1,1), Cells(last_row,last_col))

我应该注意你也可以设置一个等于范围的变量:

Dim rng as Range
Set rng = Selection

这可能对您有用,但我也应该注意到在代码中使用选择存在风险。

答案 1 :(得分:0)

基本上,这就是我所寻找的,也许将来有人会偶然发现并使用它。

'----------+ Format Raw Data As Table +----------
Dim table0 As ListObject
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select

Set table0 = ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes)
tableb0.TableStyle = "TableStyleMedium15"
'----------+ Done Formatting as Table +-----------
'Start by declaring a variable as a ListObject, 
'Goto cell A1
'Select All the way from top to bottom till last cell with data
'Select All the way from left to right till last cell with data
'set table0 ListObject to the selection we just made
'finally format table0 by accessing table style "property"
'This may not work if data has blank cells.
'Specially, if A rows / columns have rows or data is not uniform.

* @rryanp对@Iryry Pavliv实际上属于帮助我和@ {4}}回答另一个问题的信用。