gpt4 book ai didi

vba - 使用 SUMIFS 添加持续时间总是给出 00 :00:00

转载 作者:行者123 更新时间:2023-12-04 22:08:29 24 4
gpt4 key购买 nike

Sub Add_sumf()
Dim i As Integer
i = 3
Dim cellDate As Integer
cellDate = 0
Dim cellDate1 As Date
cellDate1 = TimeValue("00:00:00")
Dim total As Integer
total = 0
Dim j As Integer
j = 2
Dim k As Integer
k = 2
Set aa = Workbooks("Book3").Worksheets(1)
Set bb = Workbooks("Final_result").Worksheets(1)
Do While bb.Cells(1, k).Value <> ""

For Each y In bb.Range("A:A")
On Error GoTo Label

If UCase(bb.Cells(j, "A").Value) <> "" Then


cellDate1 = WorksheetFunction.SumIfs(aa.Range("F:F"), aa.Range("B:B"), UCase(bb.Cells(1, k).Value), aa.Range("G:G"), UCase(bb.Cells(j, "A").Value))
bb.Cells(j, k).Value = TimeValue(cellDate1)

cellDate1 = TimeValue("00:00:00")
bb.Cells(j, k).NumberFormat = "[h]:mm:ss"

On Error GoTo Label

j = j + 1
Else
Exit For
End If
Next
j = 2
k = k + 1
Loop
Label:
'MsgBox Err.Description
Exit Sub


End Sub

我使用上面的代码根据其他两列的值添加持续时间,但我总是得到 00:00:00 作为结果。

如果我使用下面的代码,我会得到答案,但它太慢非常慢
Sub add_it_time()
Dim i As Integer
i = 3
Dim cellDate As Integer
cellDate = 0
Dim cellDate1 As Date
cellDate1 = TimeValue("00:00:00")
Dim total As Integer
total = 0
Dim j As Integer
j = 2
Dim k As Integer
k = 2
Set aa = Workbooks("Book3").Worksheets(1)
Set bb = Workbooks("Final_result").Worksheets(1)
Do While bb.Cells(1, k).Value <> ""
'MsgBox bb.Cells(1, k).Value
For Each y In bb.Range("A:A")
On Error GoTo Label
' MsgBox UCase(bb.Cells(j, "A").Value)
If UCase(bb.Cells(j, "A").Value) <> "" Then

For Each x In aa.Range("F:F")
On Error Resume Next
If UCase(aa.Cells(i, "B").Value) = UCase(bb.Cells(j, "A").Value) Then
' MsgBox aa.Cells(i, "F").Text
' total = total + Int(get_Second(aa.Cells(i, "F").Text))
If UCase(aa.Cells(i, "G").Value) = UCase(bb.Cells(1, k).Value) Then
'MsgBox aa.Cells(i, "F").Text
cellDate1 = cellDate1 + TimeValue(aa.Cells(i, "F").Value)
End If
End If
i = i + 1
Next
i = 3
On Error GoTo Label
bb.Cells(j, k).NumberFormat = "h:mm:ss"
bb.Cells(j, k).Value = WorksheetFunction.Text(cellDate1, "[hh]:mm:ss")
total = 0
cellDate1 = 0
j = j + 1
Else
Exit For
End If
Next
j = 2
k = k + 1
Loop
Label:
'MsgBox Err.Description
Exit Sub
End Sub

包含日期的源列是通用格式
我是 VBA 宏的新手

最佳答案

更新的解决方案:

在与 OP 聊天讨论后,决定纯公式解决方案很好 - 以下是要在 上执行的公式/操作单独的表开始 A1 :

  • A 行将生成表头:在 A1我添加了 Agent Name / Release Code , 并开始 B1有一个所有可用的列表Release Code值(使用 Remove Duplicates 很容易获得)。
  • 为了简单和有效,我定义了以下命名范围(因为初始数据不是静态的):AgentNames=OFFSET('Agent State'!$B$2,0,0,COUNTA('Agent State'!$B:$B)-1,1) - 这将返回初始工作表上的名称范围不包括 标题; TimeInStateData=OFFSET(AgentNames,0,4)ReleaseCodes=OFFSET(AgentNames,0,5)移位 AgentNames范围。
  • A 列中我们应该获得名称列表,它应该是唯一的,所以在列A中选择任意数量的单元格,即 不少于唯一名称的数量 - 对于我使用的样本 A2:A51 ,然后输入公式:=IFERROR(INDEX(AgentNames,SMALL(IF(MATCH(AgentNames,AgentNames,0)=ROW(INDIRECT("1:"&ROWS(AgentNames))),MATCH(AgentNames,AgentNames,0),""),ROW(INDIRECT("1:"&ROWS(AgentNames))))),"")并按 CTRL+SHIFT+ENTER 而不是通常的 ENTER - 这将定义一个 多单元阵列 公式,将产生 curl {}它周围的括号(但要执行 而不是 手动键入它们!)。
  • B2 : =IF(OR($A2="",SUMPRODUCT(--($A2=AgentNames),--(B$1=ReleaseCodes),TIMEVALUE(TimeInStateData))=0),"",SUMPRODUCT(--($A2=AgentNames),--(B$1=ReleaseCodes),TIMEVALUE(TimeInStateData))) - 普通公式,它将为空名称或零时间返回空值。
  • B2 复制公式到整张 table 。

  • 评论:
  • 时间值总和的结果范围应格式化为 Time .
  • 如果将来应该扩展名称列表 - 为新范围重复步骤 3 , 但不要向下拖动公式 - 这将导致 You cannot change part of an array错误。

  • 示例文件: https://www.dropbox.com/s/quudyx1v2fup6sh/AgentsTimeSUM.xls

    初步答案:

    也许这太简单明了,但乍一看我不明白为什么你有那行代码:
    cellDate1 = TimeValue("00:00:00")
    在您的 SUMIFS 之后: cellDate1 = WorksheetFunction.SumIfs(aa.Range("F:F"), ...
    尝试删除将零分配给 cellDate1 的第一个.

    关于vba - 使用 SUMIFS 添加持续时间总是给出 00 :00:00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15171671/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com