|
▼Vハチ さん:
おはようございます。
>上の方のプログラムで無事できました。
>ただ、自分の環境ではこれがエラーとなっえしまいます。
>>Cells(Rows.Count, "d").End(xlUp).Offset(1, 1).Value = _
> Application.Sum(Range("d" & st, Cells(Rows.Count, "d").End(xlUp)))
それは、サンプルデータ(Vハチ さんが記述された内容から作成しています)
とVハチ さんの実際のデータに差異があるからですよね!!
その違いを見極めてください。
どんなエラーメッセージですか?
>なので、コメントアウトして実行しました。
>その結果、例えば、
>
>E列が10,20,30とあるとします。
>前スレであったとおり、10,20,30を基準に、並び替えをします。
>D列のの合計を出すのですが、30の合計が出してくれません。
>なぜか一番最後の合計のみ算出しれくれません。
そりゃあね・・、そのコメントにしたコードが最終行の合計をだすコードですからねえ。
>
>具体例:
>あいうえお 100 10
>さしすせそ 300 10
>はひふへほ 100 30
>なにぬねの 300 20
>まみむめも 200 30
>かきくけこ 200 10
>たちつてと 200 20
>
> ↓
>
>あいうえお 100 10
>かきくけこ 200 10
>さしすせそ 300 10
> 600
>たちつてと 200 20
>なにぬねの 300 20
> 500
>はひふへほ 100 30
>まみむめも 200 30
ですよね?だって、
>例えば、1行目から5行目のD列の合計をその区切り線(6行目)のE列にいれます。
つまり、合計値(600や500や300)は、E列に設定するのでしょう?
上記の例題をコードで記述し、同じ算出コードで試します。
これも新規ブックの標準モジュールにて
'====================================================================
Sub main()
Dim rng As Range
Dim ans As Variant
Dim ele As Variant
Dim st As Long
Call mk_sample
MsgBox "D列にサンプルデータ作成" & vbCrLf & _
"これから、処理を開始します"
st = 1
Set rng = Range("d1", Cells(Rows.Count, "d").End(xlUp))
With rng
ans = Evaluate("transpose(if(" & .Address & _
"="""",row(" & .Address & "),""" & Chr(&HFF) & """))")
ans = Filter(ans, Chr(&HFF), False)
st = 1
For Each ele In ans
Range("d" & ele).Value = _
Application.Sum(Range("d" & st, "d" & (ele - 1)))
st = ele + 1
Next
Cells(Rows.Count, "d").End(xlUp).Offset(1, 0).Value = _
Application.Sum(Range("d" & st, Cells(Rows.Count, "d").End(xlUp)))
End With
End Sub
'===================================================================
Sub mk_sample()
Cells.ClearContents
Range("c1:e9").Value = Evaluate("{""あいうえお"",100,10;" & _
"""かきくけこ"",200,10;" & _
"""さしすせそ"",300,10;" & _
""""","""","""";" & _
"""たちつてと"",200,20;" & _
"""なにぬねの"",300,20;" & _
""""","""","""";" & _
"""はひふへほ"",100,30;" & _
"""まみむめも"",200,30}")
End Sub
mainを実行してみてください
E列に合計値が入るでしょう?(Excel2002では、正しく表示されます)
さて、実際のデータとどこが違うのか よく調べてみて下さい
|
|