0

我正在处理一个非常大的 Excel 表格,它基本上是一个用户列表以及他们使用的应用程序。现在的问题是有超过 60000 个用户,每个用户至少有 10 个应用程序。所以它是一张巨大的床单。每周 2-3 次我需要提取某些特定用户使用的应用程序的详细信息。有时是 2 个用户。有时它的 10 个用户。但由于电子表格的大小,这项活动需要我很长时间(1-2 小时)。

现在,该片材以下列方式构造。

StaffId Name       DeviceNo      Location       ApplicationCount+    AppID   Application Name

12345   John Doe   DSK-982333    Mespil Road    24+    
                                                                     123     Adobe Acrobat
                                                                     234     WinZip
                                                                     345     Google Chrome

此处的 + 号表示分组的行。

无论如何我可以使用 PowerPivots 来提取这些信息吗?

4

1 回答 1

1

一种方法是:

  1. 在新工作簿中创建电子表格的副本。
  2. 在包含要筛选的人员的 StaffId(在“A”列中)的工作簿中添加另一个工作表。
  3. 在 VBA 编辑器中,插入一个新模块并添加以下代码:

    Sub FilterForUsersOfInterest()
    Dim BigSheet As Worksheet
    Dim ListSheet As Worksheet
    Dim lastCell As Range
    
    Set BigSheet = ActiveWorkbook.Sheets("ListOfApplications") 'Change the sheet name here to match your main data tab
    Set ListSheet = ActiveWorkbook.Sheets("ListOfUsers") 'Change the sheet name here to match your sheet with the users of interest this time round
    
    'Find the last used row on the worksheet
    Set lastCell = BigSheet.UsedRange.Item(BigSheet.UsedRange.Cells.Count)
    
    'Copy the values for Staff Id down all the rows
    For iRow = 2 To lastCell.Row
        If BigSheet.Range("A" & iRow) = "" Then
            BigSheet.Range("A" & iRow) = BigSheet.Range("A" & iRow - 1)
        End If
    Next iRow
    
    'Now work your way back up the rows, deleting any rows where the StaffId is not found in the current list of "users of interest"
    For iRow = lastCell.Row To 2
        If Application.WorksheetFunction.CountIf(ListSheet.Range("A:A"), BigSheet.Range("A" & iRow)) = 0 Then
            BigSheet.Range("A" & iRow).EntireRow.Delete
        End If
    Next iRow
    End Sub
    
于 2015-07-30T10:39:07.643 回答