1

脳が痛い。

パート 1/2。醜いことをお詫びします - 私は通常、必要なときにのみ VBA を学習して使用するので、VBA での私の雄弁さには少し欠けています。

行をループして、特定の値が見つかったときに行を挿入する方法を考え出そうとしています-笑わないでください、まだ終わっていません-しかし、探している値は必ずしもそうではありませんそこ行くつもりです。

私がテストしているデータは、列 A の「Days Old」です。行 (上記) を挿入し、列 BlColに式を入力して、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の回答hereに従って) が、自宅でこれを解決しようとして 5 時間目に考えることをあきらめました。

エレガントな解決策を見つけるのを手伝っていただければ、とても感謝しています!

[編集]:

@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 - 日は常に昇順です。

4

0 に答える 0