宏选择全部用于数据透视表

时间:2013-11-11 16:38:08

标签: excel vba excel-vba pivot-table

我正在尝试创建一个用于创建数据透视表的宏。我需要宏来选择工作表上的所有数据;我的一个朋友帮我创建了上面的代码,但宏只选择前两列数据而不是全部48列。有没有人看到我们可能犯的任何错误?任何回应将不胜感激!总会有48列,但每行的行数会有所不同。

Dim lastRow As Long
Dim lastCol As Long

lastRow = 1
lastCol = 1

    While Sheets("Sheet1").Cells(lastRow, lastCol).Value <> ""
        lastCol = lastCol + 1
    Wend

lastCol = lastCol - 1

    While Sheets("Sheet1").Cells(lastRow, 1).Value <> ""
        lastRow = lastRow + 1
    Wend

lastRow = lastRow - 1

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Sheet1!R1C1:R" & lastRow & "C" & lastCol, Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:="", TableName:="PivotTable1", DefaultVersion:= _
    xlPivotTableVersion12

ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)

2 个答案:

答案 0 :(得分:0)

您可能在C1中有空白,因此循环正在停止。试试这个

LastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row
LastCol = 48

答案 1 :(得分:0)

要获取最后一列数据,请尝试替换

While Sheets("Sheet1").Cells(lastRow, lastCol).Value <> ""
    lastCol = lastCol + 1
Wend

lastCol = Sheets("Sheet1").Cells(1, Sheets("Sheet1").Columns.Count).End(xlToLeft).Column

这将为您提供右侧的最后一列,其中包含第1行中的数据。

While Sheets("Sheet1").Cells(lastRow, 1).Value <> ""
    lastRow = lastRow + 1
Wend

lastRow = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, 1).End(xlUp).row

这将为您提供第1列中包含数据的最后一行数据


如果您有空白单元格,那么这可能会干扰您设置范围。循环获得最终值也似乎非常低效。