Excel条件和取决于相对单元格

时间:2014-08-22 10:24:24

标签: excel vba excel-vba

我有一个包含3名不同员工的工作表。每个工作人员都有自己的工作表,其中包含他们每周工作的所有客户。我目前有一个工作宏,它将接受用户输入的客户端代码,然后搜索每个工作人员并生成一个类似于以下内容的客户端摘要

Client Code         Job               Time       Staff       
BW01                Some work         5          Tim
BW01                Some work         4          Tim
BW01                Some work         7.5        Jason
BW01                Some work         8          Frank
BW01                Some work         2.75       Frank

我正在寻找一种方法来搜索此列表并将每个人的时间相加。所以Tim将是9小时,Jason 7.5,Frank 10.75。我用以下代码实现了这个目标,

Sub totalTime()

Dim i As Long
For i = Range("I" & Rows.Count).End(3).Row To 1 Step -1
    If Range("I" & i) <> Range("I" & i + 1) Then
    Rows(i + 1).Insert
End If
Next i
    For Each numrange In Columns("G").SpecialCells(xlConstants, xlNumbers).Areas
        SUMADDR = numrange.Address(False, False)
        numrange.Offset(numrange.Count, 0).Resize(1, 1).Formula = "=SUM(" & SUMADDR & ")"
        c = numrange.Count
    Next numrange
NoData:
Columns(3).Value = Columns(3).Value
End Sub

因为这是我能想到的唯一方法,但总时间需要在其他地方打印,所以希望取消添加新的行方法并尽可能将每个人的总数存储在数组中。

我显然不是要求某人这样做,我只是无法绕过一种可以做到的方式,如果有人有更好的方法,任何想法都会受到高度赞赏。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您仍想使用VBA,可以执行以下代码之类的操作。我粘贴了您的数据,我的数据范围是A1:F6。代码检查Staff列中的所有单元格,如果Staff是Tim,Frank或Jason,则会增加他的工作时间。最后它显示给定单元格中的总时间。注意数字应该用逗号写(或者使用一些时间格式化),所以我为你提供了替换属性。

Sub TotalTime_Staff()

Dim lastrow As Long, staff_member As String
Dim TimeTim As Double, TimeJason As Double, TimeFrank As Double

lastrow = Worksheets("Arkusz1").Cells(1, 4).End(xlDown).Row


For i = 1 To lastrow

    With Worksheets("Arkusz1")

        staff_member = .Cells(i, 4).Value

        .Cells(i, 3) = Replace(.Cells(i, 3), ".", ",")

        Select Case staff_member

            Case "Tim"
                TimeTim = TimeTim + .Cells(i, 3)

            Case "Jason"
                TimeJason = TimeJason + .Cells(i, 3)

            Case "Frank"
                TimeFrank = TimeFrank + .Cells(i, 3)

        End Select

    End With

Next i

With Worksheets("Arkusz1")
    .Cells(1, 6) = TimeTim
    .Cells(2, 6) = TimeJason
    .Cells(3, 6) = TimeFrank
End With

End Sub