我的脑袋疼。
第 1 部分,共 2 部分。为丑陋道歉 - 我通常只在需要时学习和使用 VBA,所以我在语言方面的口才有点欠缺。
我一直在尝试想出一种方法来循环遍历我的行并在找到特定值时插入一行 - 不要笑,我还没有完成 - 但我正在寻找的值不一定会在那里。
我正在测试的数据是 A 列中的 'Days Old' - 我需要插入一行(上图)并lCol
使用公式填充 B 列,以便在第 15 天将天数总和返回到前一个目标日, 30、60、90、120、150和lRow -1
(即 180+)
这里是我使用代码的地方(第 2 部分最后乱七八糟地扔了,不考虑手头的问题):
With Sheets("Output")
lRow = Range("A" & Rows.Count).End(xlUp).Row
lColi = Cells.Find("*", SearchOrder:=xlByColumns, _
LookIn:=xlValues, SearchDirection:=xlPrevious).Column
lCol = Split(Cells(2, lColi).Address, "$")(1)
For i = lRow To 3 Step -1
If Cells(i, 1).Value = "15" OR _
Cells(i, 1).Value = "30" OR _
Cells(i, 1).Value = "60" OR _
Cells(i, 1).Value = "90" OR _
Cells(i, 1).Value = "120" OR _
Cells(i, 1).Address = Range("A" & lRow -1) Then ' Not quite sure on that one yet either..
Rows(i).Select
Selection.Insert Shift:=xlDown
' Part 2 (Included just in case I delete it from the Module in a rage later tonight)
' Cells(i,1).Offset(-1,0).Select
' Selection.Value = [Date Range. Worrying about this later]
'Cells(i,1).Offset(-1,1).Select
'ActiveCell.FormulaR1C1 = "=SUM(R[-" & n & "]C:R[-1]C)"
' Where n is somehow the offset to +1 from the previous target.... but again, later.
'ActiveCell.NumberFormat = "0"
'Selection.AutoFill Destination:=ActiveCell.Range("C" & i & ":" & lCol & i), Type:= _
xlFillDefault
这是我身边的刺(编辑:想象一下我有声望点,这是我准备好的excel表的方便图片):
[A]
..
88
89
91
92
..
如您所见,我并不总是得到需要查找的实际天数(在上面的示例中为 90)的输出。
所以; 有没有一种方法可以遍历我的行并在我的目标日期或最近的前一天插入一个新行(如果它没有出现)?
我确实想知道这是否可能是某种巧妙使用 Case 的候选者(根据Adam Ralph在此处的回答),但放弃了尝试思考到第五个小时试图在家中解决这个问题。
如果您能帮我找到一个优雅的解决方案,我将不胜感激!
[编辑]:
@mehow,完成的结果通常是这样的,91 天以上的行展示了插入行的新数据:
A = "(前一个目标) - (下一个目标-1)" B - lCol = sum(previoustarget:target-1)
[A] [B] [C] [D]
...
87 18
88 1 2
89 3
"60 - 89" 5 3 59
91 1
92 1 2
...
显然,在这种情况下,我可以朝另一个方向寻找 89 - 但同样,不能保证这将包含在我正在使用的工作表中。
@Glh - 日子总是在上升。