优化大型Excel报告

时间:2016-11-29 08:49:05

标签: excel vba excel-vba

我正在寻找任何可以帮助我优化报告的建议。

报告包含数据透视表,用于从其他电子表格中提取数据。数据透视表中的数据按VBA宏着色和分组。 我主要关心的是着色和分组。

我必须为线条的大部分背景着色,然后我必须对它们进行分组。我正在用数据读取表格中的所有行,然后我用层次结构切割粘贴5列,定义行着色和分组规则。如果值在列中匹配,我会逐行检查。

层次结构示例:

CoreElement Category    Subcategory     Code    Product
6           26          161             1289    3014659
6           26          161             1245    3014655
6           26          161             1289    3014585
6           26          161             1282    3019640
7           28          164             164     164
7           7           7               7       7
7           7           7               7       7
5           22          142             1208    1208
5           22          142             142     142

着色:

Set oColor = Worksheets("Category_Sales").Range("A13:A" & MaxLineNumber + 13)
For Each CellId In oColor.Cells
k = CellId.Column
r = CellId.Row

    If Cells(r, 64).Value = "-1" Then 'Store Sales
            Range("A" & r & ":AV" & r).Interior.Color = RGB(204, 255, 204)
            Range("A" & r & ":AV" & r).Font.Bold = True
    ElseIf Cells(r, 64).Value = Cells(r, 65).Value And Cells(r, 65).Value = Cells(r, 66).Value And Cells(r, 64) <> "" Then 'Core Element
            Range("A" & r & ":AV" & r).Interior.Color = RGB(214, 225, 238)
            Range("A" & r & ":AV" & r).Font.Bold = True
    ElseIf Cells(r, 64).Value <> Cells(r, 65).Value And Cells(r, 65).Value = Cells(r, 66).Value Then 'Category
            Range("A" & r & ":AV" & r).Interior.Color = RGB(255, 255, 204)
    ElseIf Cells(r, 65).Value <> Cells(r, 66).Value And Cells(r, 66).Value = Cells(r, 67).Value Then 'Subcategory
            Range("A" & r & ":AV" & r).Interior.Color = RGB(191, 191, 191)
    ElseIf Cells(r, 66).Value <> Cells(r, 67).Value And Cells(r, 67).Value = Cells(r, 68).Value Then 'BMC
            Range("A" & r & ":AV" & r).Interior.Color = RGB(217, 217, 217)
    Else
            Range("A" & r & ":AV" & r).Interior.Color = xlNone 'Product
    End If

Next CellId

创建两个第一个分组的宏,其余组的宏几乎相同:

k = 13
Set oColor = Worksheets("Category_Sales").Range("A13:A" & MaxLineNumber + 13)
For Each CellId In oColor.Cells
r = CellId.Row

    If Cells(r, 64).Value = "-1" Then
            k = k + 1
    ElseIf Cells(r, 64).Value <> Cells(r + 1, 64).Value And Cells(r, 64).Value <> "" Then
            Rows(k & ":" & r - 1).Rows.Group
            k = r + 1
    End If

Next CellId

k = 13
Set oColor = Worksheets("Category_Sales").Range("A13:A" & MaxLineNumber + 13)
For Each CellId In oColor.Cells
r = CellId.Row

    If Cells(r, 65).Value = Cells(r, 64).Value Then
            k = k + 1
    ElseIf Cells(r, 65).Value <> Cells(r + 1, 65).Value And Cells(r, 65).Value <> "" Then
            Rows(k & ":" & r - 1).Rows.Group
            k = r + 1

    End If

Next CellId

在包含数据的表格中,我获得了22,000行。 此报告将另存为.xlsb工作簿。

1 个答案:

答案 0 :(得分:0)

这是我在大型报告中使用的代码: 只需在代码的开头调用OnStart,最后调用OnEnd。

 print(df['text'].apply(lambda text: [sent for sent in sent_tokenize(text)
                           if any([(w2.lower() in w.lower()) for w in word_tokenize(sent)
                                   for w2 in searched_words])
                                ])
 )