简单的Excel宏 - 没有获得预期的结果,击中砖墙

时间:2017-01-26 17:22:26

标签: excel vba excel-vba

我在处理某些事情时遇到了一些麻烦,希望有人能够帮助我(相当新手)找到我在这个Excel宏中做错的事情。< / p>

我有两个工作表,一个包含数据,一个包含计算数据表统计数据所需的条件(工作人员姓名,日期和月份名称)。编写宏是为了给出给定范围的工人在给定的月和年范围内执行的特定任务的数量的细分。扭曲的是,我试图确定任何给定工人执行任务的日期列表中唯一的日期。

例如,如果工人在2017年5月1日完成任务两次,并且每次都在2017年6月1日,2017年7月1日和2017年8月1日完成 - 我试图得到一个回复​​答案尽管已经完成了五项任务,但只使用了四天,对于那名工人来说只有四天。

我在.Value数组与Date数组的日期格式化方面遇到了很多问题,但我想我已经纠正了。我遇到的问题是我的输出数据与它应该的数据不匹配,数字有时会达到数百到数百,而单个月是不可能的。

任何帮助将不胜感激!我知道使用公式可以完成这项任务,但是我的数据非常疯狂,并且它正在消耗大量的处理能力。这是我的代码:

Sub Button1_Click()
Dim Data() As Variant
Dim Dates() As Variant

Data = Worksheets("Master List").Range("A2:" & "P" & Worksheets("Master    List").UsedRange.Rows.Count).Value

ReDim Dates(0 To 0)
DataLengthX = UBound(Data, 1)
MonthCount = 0

For i = 41 To 76

    MonthYear = Worksheets("Daily Count").Cells(i, 1).Value

    For p = 3 To 27

        DateNum = 0
        ReDim Dates(0 To 0)
        ReviewerName = Worksheets("Daily Count").Cells(40, p).Value

        For x = 1 To DataLengthX

            DateMatch = False

            If ReviewerName = Data(x, 8) And MonthYear = Data(x, 12) Then

                For Z = 0 To UBound(Dates, 1)

                    If Format(Dates(Z), "m/d/yyyy") = Format(Data(x, 9), "m/d/yyyy") Then

                        DateMatch = True
                        Exit For

                    End If

                Next Z

                If DateMatch = False Then

                    ReDim Dates(0 To DateNum)
                    Dates(DateNum) = Format(Data(x, 9), "m/d/yyyy")
                    DateNum = DateNum + 1

                End If

            End If

        Next x

        If UBound(Dates, 1) <> 0 Then

            Worksheets("Daily Count").Cells(i, p) = UBound(Dates, 1) + 1

        Else

            Worksheets("Daily Count").Cells(i, p) = 0

        End If

    Next p

Next i

0 个答案:

没有答案