Создание сводки в Excel с использованием VBA не удается, когда есть больше данных - PullRequest
0 голосов
/ 14 марта 2020

Мой Excel: -

enter image description here

Мой VBA-код для создания Pivot: -

Sub Macro10()
'
' Macro10 Macro
'
' Keyboard Shortcut: Ctrl+q
'
    Application.CutCopyMode = False
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Sheet1!R1C1:R20C4", Version:=6).CreatePivotTable TableDestination:= _
        "Sheet2!R3C1", TableName:="PivotTable3", DefaultVersion:=6
    Sheets("Sheet2").Select
    Cells(3, 1).Select
End Sub

Выше создается Pivot, но когда в Excel больше / меньше строк, это выдает ошибку.

1 Ответ

0 голосов
/ 14 марта 2020

Чтобы динамически найти последнюю использованную строку в листе, попробуйте следующее.

Ways To Find The Last Row

Sub FindingLastRow()
'PURPOSE: Different ways to find the last row number of a range
'SOURCE: www.TheSpreadsheetGuru.com

Dim sht As Worksheet
Dim LastRow As Long

Set sht = ActiveSheet

'Using Find Function (Provided by Bob Ulmas)
  LastRow = sht.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

'Using SpecialCells Function
  LastRow = sht.Cells.SpecialCells(xlCellTypeLastCell).Row

'Ctrl + Shift + End
  LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

'Using UsedRange
  sht.UsedRange 'Refresh UsedRange
  LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row

'Using Table Range
  LastRow = sht.ListObjects("Table1").Range.Rows.Count

'Using Named Range
  LastRow = sht.Range("MyNamedRange").Rows.Count

'Ctrl + Shift + Down (Range should be first cell in data set)
  LastRow = sht.Range("A1").CurrentRegion.Rows.Count

End Sub

Чтобы найти последний столбец, попробуйте следующее.

Ways To Find The Last Column

Sub FindingLastColumn()

'PURPOSE: Different ways to find the last column number of a range
'SOURCE: www.TheSpreadsheetGuru.com

Dim sht As Worksheet
Dim LastColumn As Long

Set sht = ThisWorkbook.Worksheets("Sheet1")

'Ctrl + Shift + End
  LastColumn = sht.Cells(7, sht.Columns.Count).End(xlToLeft).Column

'Using UsedRange
  sht.UsedRange 'Refresh UsedRange
  LastColumn = sht.UsedRange.Columns(sht.UsedRange.Columns.Count).Column

'Using Table Range
  LastColumn = sht.ListObjects("Table1").Range.Columns.Count

'Using Named Range
  LastColumn = sht.Range("MyNamedRange").Columns.Count

'Ctrl + Shift + Right (Range should be first cell in data set)
  LastColumn = sht.Range("A1").CurrentRegion.Columns.Count

End Sub

Ресурс:

https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba

Кроме того, включите Macro Recorder и щелкните по шагам, которые необходимо сделать. Весь необходимый код будет сгенерирован для вас. Вы получите намного больше кода, чем вам нужно, но это нормально, потому что вы можете просто вырезать ненужные разделы. С помощью мыши щелкните внутри кода макроса и снова и снова нажимайте клавишу F8, чтобы шаг за шагом проходить по коду. Сделайте это, и вы узнаете тонну! Сделайте несколько умных поисков в Google по вещам, которые вы не понимаете, чтобы заполнить пробелы. Через несколько дней вы станете экспертом в этом деле.

Вот хорошая ссылка для начала.

https://www.contextures.com/excel-vba-pivot-table-field-list.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...