是否可以在Excel 2010中跨多个工作表计算日期标记变量并按日期列出?

时间:2014-01-07 06:07:48

标签: excel excel-vba pivot-table vba

我很擅长excel,因为它涉及整合数据并且对VBA的经验有限。我从未使用过数据透视表。我知道我可能需要调整我的表以适应解决方案但不喜欢并且不确定从哪里开始。

在下面的示例中:

  • 每个单元格有六种可能的非数字标准化值 在F栏中(为了便于讨论,我使用了不同的类型 水果代表这些不同的价值观。)

  • 对于每个电话联系人,在E列中生成日期戳,并且a 标准化的输入在F列。

  • 在任何给定时间,工作簿中都有大约20个工作表。工作表都添加了和 每月省略。

  • 每个工作表的标题都相同。

  • 每个工作表中最多有500行。因此,日期范围 每张纸都有所不同。

  • E列中的日期从最早开始按顺序显示 在纸张1上的单元格E2中的日期和在纸张上的单元格E500中的最新日期 20。

我需要一种能够捕获每天“注意到”的苹果,香蕉,橙子,葡萄,柠檬和梨的数量的解决方案。理想情况下,每个工作表应在F列的顶部或底部以及工作簿末尾(或另一个工作簿)中所有工作表的主要摘要中有各自的摘要。我正在寻找各种各样的“仪表板”。可以这样做吗?怎么样?

1 个答案:

答案 0 :(得分:0)

编辑:下面的代码现在应按日期排列总计。

Private Sub Total()

Dim apple As Integer
Dim banana As Integer
Dim grape As Integer
Dim pear As Integer
Dim lemon As Integer
Dim orange As Integer
Dim sheet As Worksheet
Dim i As Integer
Dim lastRow As Integer
Dim j As Integer
Dim comp1 As String
Dim comp2 As String

apple = 0
banana = 0
grape = 0
pear = 0
lemon = 0
orange = 0


For Each sheet In Worksheets
sheet.Activate
lastRow = WorksheetFunction.CountA(Range("A:A"))
j = 2
'Create the header for the Totals cells
ActiveSheet.Cells(lastRow + 1, 1).Value = "Date"
ActiveSheet.Cells(lastRow + 1, 2).Value = "Apples"
ActiveSheet.Cells(lastRow + 1, 3).Value = "Bananas"
ActiveSheet.Cells(lastRow + 1, 4).Value = "Grapes"
ActiveSheet.Cells(lastRow + 1, 5).Value = "Pears"
ActiveSheet.Cells(lastRow + 1, 6).Value = "Lemons"
ActiveSheet.Cells(lastRow + 1, 7).Value = "Oranges"

For i = 2 To lastRow
    'Compare the date in row i to row i + 1 to see if we should add the totals or start a new daily total
    comp1 = ActiveSheet.Cells(i, 5).Value
    comp2 = ActiveSheet.Cells(i + 1, 5).Value

        'Determine which variable to increment
       If ActiveSheet.Cells(i, 6).Value = "apple" Then
            apple = apple + 1
        ElseIf ActiveSheet.Cells(i, 6).Value = "banana" Then
            banana = banana + 1
        ElseIf ActiveSheet.Cells(i, 6).Value = "grape" Then
            grape = grape + 1
        ElseIf ActiveSheet.Cells(i, 6).Value = "pear" Then
            pear = pear + 1
        ElseIf ActiveSheet.Cells(i, 6).Value = "lemon" Then
           lemon = lemon + 1
        ElseIf ActiveSheet.Cells(i, 6).Value = "orange" Then
            orange = orange + 1
        Else
        End If
    If comp1 <> comp2 Then
        'If this is the last entry for this date, past the date and totals
        ActiveSheet.Cells(lastRow + j, 1).Value = comp1
        ActiveSheet.Cells(lastRow + j, 2).Value = apple
        ActiveSheet.Cells(lastRow + j, 3).Value = banana
        ActiveSheet.Cells(lastRow + j, 4).Value = grape
        ActiveSheet.Cells(lastRow + j, 5).Value = pear
        ActiveSheet.Cells(lastRow + j, 6).Value = lemon
        ActiveSheet.Cells(lastRow + j, 7).Value = orange
        'Clear variables for next day
        apple = 0
        banana = 0
        grape = 0
        pear = 0
        lemon = 0
        orange = 0
        'Move to next line for totals row
        j = j + 1

    Else
    End If
Next i

Next sheet

End Sub

这应该以您要查找的方式正确地对每个页面进行总计,但不会为所有页面创建总计。您可以在此代码中实现一个大型数组来存储页面之间的所有值,或者可能使用VLookup和一些For循环创建一个新函数,但它会相当复杂。如果可能的话,我会尝试在您的Grand Total工作表上制作一个公式来提取数据。