我有一个包含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
因为这是我能想到的唯一方法,但总时间需要在其他地方打印,所以希望取消添加新的行方法并尽可能将每个人的总数存储在数组中。
我显然不是要求某人这样做,我只是无法绕过一种可以做到的方式,如果有人有更好的方法,任何想法都会受到高度赞赏。
非常感谢。
答案 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