Excel 创建单元格的动态交互范围,以提供所需的小时数输出

Excel 创建单元格的动态交互范围,以提供所需的小时数输出,excel,excel-formula,vba,Excel,Excel Formula,Vba,我有一个原始数据表,其中列作为时间段,行标签作为技术人员的姓名。填写的数据是汽车的登记号 我必须计算两件事: 每人每天工作的小时数 相关技术人员在一辆车上花费的小时数 通过使用透视表,我能够完成第一项任务,但我被第二项任务卡住了。 请建议一些简单的方法。 谢谢 附件是参考图像虚拟数据 我认为使用pivot表作为您希望显示在新表中的数据(即汽车注册号)无法实现这一点,pivot不允许您将这些注册号作为行/列条目 你应该借助VBA。 您可以使用loop读取此数据并为每辆车创建计数,您应该使用if-e

我有一个原始数据表,其中列作为时间段,行标签作为技术人员的姓名。填写的数据是汽车的登记号

我必须计算两件事:

  • 每人每天工作的小时数
  • 相关技术人员在一辆车上花费的小时数
  • 通过使用透视表,我能够完成第一项任务,但我被第二项任务卡住了。 请建议一些简单的方法。 谢谢

    附件是参考图像虚拟数据


    我认为使用pivot表作为您希望显示在新表中的数据(即汽车注册号)无法实现这一点,pivot不允许您将这些注册号作为行/列条目

    你应该借助VBA。
    您可以使用loop读取此数据并为每辆车创建计数,您应该使用
    if-else
    loop。要设置哪个条目应该计数,哪个条目不应该计数的条件,可以使用以下代码,从现有表生成新的数据表,并以可以生成透视表的格式提供数据

    Sub K()
    Dim LR As Long, i As Long, j As Long, LR1 As Long
    Dim reg As String, person As String
    Dim DT As Date
    
    Range("AB:AD").Delete Shift:=xlToLeft
    
    Sheets("Sheet1").Select
    LR = Range("A" & Rows.Count).End(xlUp).Row
    
    For j = 5 To LR
    For i = 4 To 25
    
    If Cells(j, i).Value = "" Then
    
    
    Else
    reg = Cells(j, i).Value
    LR1 = Range("AC" & Rows.Count).End(xlUp).Row
    DT = Cells(j, 1).Value
    person = Cells(j, 2).Value
    
    Range("AC" & LR1).Offset(1, 0).Value = reg
    Range("AC" & LR1).Offset(1, 1).Value = person
    Range("AC" & LR1).Offset(1, -1).Value = DT
    
    End If
    
    Next
    Next
    
    Range("AB1").FormulaR1C1 = "Date"
        Range("AC1").FormulaR1C1 = "Reg. No."
        Range("AD1").FormulaR1C1 = "Person"
        Range("AE1").FormulaR1C1 = "Count"
    
        LR1 = Range("AC" & Rows.Count).End(xlUp).Row
        Range("AE2:AE" & LR1).Value = 0.5
    
    
    
    
    
    
    End Sub
    

    此表可用作PIVOT的源,每次运行代码时,它都会根据给定的数据提供完整的数据集。

    如果使用PIVOT表,则使用
    车辆注册号作为PIVOT表中的行标识符。这就是问题所在,没有单独的列列出车辆的注册号。这些数字根据车辆维修时间和维修人员插入表中。这样的字段不会出现在透视表中。为了正确理解您,因为(2)不清楚:您想要每辆车的名称列表,以及他们使用该特定车的总时间(与日期无关)?我想要一个表,在一列中包含车辆的注册号,以及每个人在后续列中花费的小时数。这必须来自相同的原始数据。从这个表中,我将进一步创建一个透视表,以创建一个带有切片器等的图形。包括日期会使事情变得太复杂。我的想法是,一个表显示了表中出现的重复值,显示为列表。这将是注册号列。此外,它将在服务人员姓名的相应列中显示重复值的计数。因此,通过这种方式,我可以获得每个技师在该车上花费的小时数。从第一列循环并创建一个新表,从中可以创建透视表,因为您要使用切片器和动态范围。一旦你在期望的输出中得到了这个范围,使用pivot。你的范围应该是这样的。日期注册。这很有效!非常感谢你!还有一种方法可以在每次运行代码时刷新我将使用这个新表创建的透视表的源数据吗?