1

我正在尝试制作一个用于创建数据透视表的宏。我需要宏来选择工作表上的所有数据;我的一个朋友帮助我创建了上面的代码,但是宏只选择了前两列数据,而不是全部 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)
4

2 回答 2

0

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

LastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row
LastCol = 48
于 2013-11-11T17:18:26.813 回答
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 列中包含数据的最后一行数据


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

于 2013-11-11T17:41:31.770 回答