プロが教えるわが家の防犯対策術!

コードをうまくまとめられることが
できないんでしょぅか。
折角、プログラムをやっているのに
プログラム自体がアナログコード
になりはずかしいです。


Sub test31()
Dim i, l As Long
For i = 15 To 17


Cells(i, 12).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/5/1", Range("f15:f22"), "<=2017/5/31")

Cells(i, 13).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/6/1", Range("f15:f22"), "<=2017/6/30")

Cells(i, 14).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/7/1", Range("f15:f22"), "<=2017/7/31")

Cells(i, 15).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/8/1", Range("f15:f22"), "<=2017/8/31")

Range("l15:o17").NumberFormatLocal = "#,##0"
Next



End Sub

A 回答 (2件)

こんばんは!



VBAでもそのままワークシート関数が使えますので、
そのままワークシート関数を使ってみました。

Sub Sample1()
Dim myRng As Range
With Range("L15:O17")
.NumberFormatLocal = "#,##0"
.Formula = "=SUMIFS($G$15:$G$22,$E$15:$E$22,$K15,$F$15:$F$22,"">""&EOMONTH(DATE(2017,COLUMN(E1),0),0),$F$15:$F$22,""<=""&EOMONTH(DATE(2017,COLUMN(E1),1),0))"
.Value = .Value
End With
End Sub

こんな感じでも同様の結果になると思います。

※ 大勢に影響はないと思いますが・・・
お示しのコードの変数の宣言の部分で
>Dim i, l As Long
は一つずつ
>Dim i As Long, l As Long
と宣言するコトをおススメします。

>Dim i, l As Long
とすると「i」はVariant型になります。m(_ _)m
    • good
    • 0
この回答へのお礼

有難うございます。
同じコードでもなんかレベルが違いますね。
EOMONTH(DATE(2017,COLUMN(E1),0),0),$F$15:$F$22,""<=""&EOMONTH(DATE(2017,COLUMN(E1),1),0))"
.Value = .Value
恥ずかしながらこのコードがわかりませんが
調べて自分なりに解決します。
貴重な時間有難うございました。

お礼日時:2017/10/17 22:40

No.1です。



投稿後きづきました。

前回のコード内の
>Dim myRng As Range
は不要でしたね。
消去してください。

どうも失礼しました。m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!