【发布时间】:2016-04-21 08:43:31
【问题描述】:
我正在构建一个电子表格,并试图获得每位员工每天的总生产力。等式很简单——>(活动 1 * 循环时间 1)+(活动 2 * 循环时间 2)..... 我有 x 数量的列(它们每次都会改变)和 y 数量的行(每天都在增长)。数据示例如下:
日期 |姓名 |第一幕| CT 1|第二幕| CT 2|生产力
2016 年 1 月 15 日 |乔纳森 | 20 | 2 | 10 | 1.5 | .....
2016 年 1 月 14 日 |比利 | 19 | 2 | 10 | 1.5 | .....
我怎样才能将 (act 1 * Ct1) + (Act 2 * Ct2) 的方程自动化到第 n 个,保持一切动态?
我觉得我需要将活动存储在一个数组中,将周期时间存储在另一个数组中,然后将这两个数组相乘。我不确定如何做到这一点,因为我对数组非常陌生,对 VBA 非常熟悉。我一直在考虑其他方法来做到这一点,但一直没有想出任何方法。
有人可以帮助我吗?完整的解释也将不胜感激。 :)
Sub InsertColumnsAndFormulasUntilEndOfProductivityTable_MakeProductivityNumbers()
With Sheet6
Set EmployeesRange = .Range("A1", .Range("B1").End(xlDown))
End With
With Sheet1
Set ActivityRange = .Range("A1", .Range("B1").End(xlDown))
End With
'insert column (For i = 1...) and then vlookup (FormulaRange1.Formula...)
With Sheet4
y = .Cells(.Rows.Count, 1).End(xlUp).Row
x = (.Cells(1, .Columns.Count).End(xlToLeft).Column) * 2
Startrow = 2
StartColumn = 2
For i = 1 + StartColumn To (x + 1) Step 2
.Columns(i).EntireColumn.Insert
Set FormulaRange1 = .Range(.Cells(Startrow, i), .Cells(y, i))
If i = 3 Then
'insert title for usernames and then vlookup
Cells(Startrow - 1, i).Value = Cells(Startrow - 1, i - 1).Value & "'s Team"
FormulaRange1.FormulaR1C1 = "=VLookup(R[0]C[-1],'" & EmployeesRange.Parent.Name & "'!" & EmployeesRange.Address(1, 1, xlR1C1) & ", 2, False)"
ElseIf i <= x Then
'insert title for activities and then vlookup lock row 1
Cells(Startrow - 1, i).Value = Cells(Startrow - 1, i - 1).Value & " Cycle Time"
FormulaRange1.FormulaR1C1 = "=VLookup(R1C[-1],'" & ActivityRange.Parent.Name & "'!" & ActivityRange.Address(1, 1, xlR1C1) & ", 2, False)"
Else
'Sum totals of productivity per person per day
Cells(Startrow - 1, i - 1).Value = "Totals"
'THIS IS WHERE THE PRODUCTIVITY EQUATION/LOOP NEEDS TO GO!...
End If
Next
End With
End Sub
【问题讨论】:
-
希望大家可以试试表格格式excel-easy.com/data-analysis/tables.html
-
嗨 Linga,我正在尝试在 VBA 中执行所有操作 - 您的链接建议手动构建表格...我说的对吗?我也想过用复制和粘贴循环构建一个表格,但我认为有更好的方法来处理数组。 :)