我正在尝试创建一个用于创建数据透视表的宏。我需要宏来选择工作表上的所有数据;我的一个朋友帮我创建了上面的代码,但宏只选择前两列数据而不是全部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)
答案 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列中包含数据的最后一行数据
如果您有空白单元格,那么这可能会干扰您设置范围。循环获得最终值也似乎非常低效。