|
>ただ、Sampleをいただいたので基本的な考え方はわかったのですが、
>もっと基本的なこと。。
>2の場合はどうやるのかなぁ?と・・・疑問が。
>
>最初の質問でも書いた通りマクロの記録でとると
>
>ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
>のような形となってしまうので、毎回変化する行数には
>使えません。
>単純にこのような場合でもSampleにいただいたような
>やり方をしなければいけないのでしょうか?
>基本的なことがわかってなくて申し訳ありません
もっと簡単な方法が有るのかも解りませんが?
私は、ここら辺が一番単純な方法では無いかと思っています
Do〜LoopやFor〜Nextを使って上から見て行く、
若しくは下から見て行くのが、速い遅いは別にして
一番解りやすい(応用範囲が広い)方法なのでは?
因みに、SampleをFor〜Nextで書き換えると、
Sample3のコードと殆ど同じに成ります
Public Sub Sample4()
Dim i As Long
Dim lngRows As Long
Dim lngCount As Long
Dim lngInsert As Long
'操作するシートを指定
With ActiveSheet
'最終行取得
lngRows = .Cells(Rows.Count, "A").End(xlUp).Row
'同一値の行数を初期値に
lngCount = 1
'2行目〜最終行+1まで繰り返し
For i = 2 To lngRows + 1
'もし、現在の値が前の値と違ったら
If .Cells(i + lngInsert, "A").Value _
<> .Cells(i + lngInsert - 1, "A").Value Then
.Cells(i + lngInsert, "A").EntireRow.Insert
'数式を出力(前回、FormulaR1C1をFormulaと書いたのは間違い)
.Cells(i + lngInsert, "A").FormulaR1C1 _
= "=Sum(R[-" & (lngCount) & "]C:R[-1]C)"
'同一値の行数を初期値に
lngCount = 1
'挿入行数を記録
lngInsert = lngInsert + 1
Else
'同一値の行数を更新
lngCount = lngCount + 1
End If
Next i
End With
End Sub
|
|