Цикл по столбцу в Excel и создание идентичного листа, который фильтруется для каждого найденного значения - PullRequest
0 голосов
/ 30 января 2019

Представьте, что у меня есть основной лист Excel в следующем формате:

store, date, total sales
NY, 1/1, 10
NY, 1/2, 15
WA, 1/1, 12
WA, 1/2, 14

Теперь, используя VBA, я хочу создать отдельную вкладку для каждого магазина, где вкладка содержит одинаковые столбцы и всестроки, где упоминается этот магазин.Например, будет вкладка под названием NY со следующим:

store, sate, total sales
NY, 1/1, 10
NY, 1/2, 15

Также будет другая вкладка для WA и для любого другого названия магазина, найденного в мастер-листе.

Вот код, который у меня есть:

Sub SplitandFilterSheet()
'Step 1 - Name your ranges and Copy sheet
'Step 2 - Filter by Department and delete rows not applicable
'Step 3 - Loop until the end of the list

Dim Splitcode As Range
Sheets("Master Sheet").Select
Set Splitcode = Range("Splitcode")

For Each cell In Splitcode
Sheets("Master Sheet").Copy After:=Worksheets(Sheets.Count)
ActiveSheet.Name = cell.Value

With ActiveWorkbook.Sheets(cell.Value).Range("MasterData")
.AutoFilter Field:=1, Criteria1:="<>" & cell.Value, Operator:=xlFilterValues
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

ActiveSheet.AutoFilter.ShowAllData
Next cell
End Sub

Ошибка, которую я получаю, находится в строке, начинающейся с ".Offset ()".Ошибка состоит в следующем:

Run-time error '1004':

Application-defined or object-defined error

Для контекста мастер-лист называется «Мастер-лист», все данные в мастер-таблице находятся в диапазоне, называемом «MasterData», который включает в себя первую строкузаголовки.Наконец, есть список возможных имен хранилищ, хранящихся в переменной Splitcode.

Я бы предпочел сделать это в VBA, а не в Python или R по ряду причин, но я пытаюсь понять эту ошибку.

1 Ответ

0 голосов
/ 30 января 2019

извините за дамп кода.Я попытался отредактировать макрос, который я использовал, чтобы использовать работу, которая была очень близка к вашим потребностям, но я, кажется, что-то пропустил по пути

Хотя все еще работает для себя!!

Sub parse_data()

Dim lr As Long, icol As Long, i As Long, vcol As Long, titlerow As Long
Dim ws As Worksheet
Dim myarr As Variant
Dim title As Range

vcol = 1
Set ws = Sheets("Sheet1")
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row

Set title = ws.Range("A1:C" & lr)
titlerow = title.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"

For i = 2 To lr
On Error Resume Next
    If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
        ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
    End If
Next

myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear

For i = 2 To UBound(myarr)
  title.AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
    If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
        Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
    Else
        Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
    End If
  ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
  Sheets(myarr(i) & "").Columns.AutoFit
Next

ws.AutoFilterMode = False
ws.Activate

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