dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
下記のコードを
Range("A4:A21"), ">=" & DateSerial(2020, i - 54, 1),
Range("A4:A21"), "<" & DateSerial(2020, 1, 31))

DateSerial(2020, i - 54, 1) i -54と入力すると2020/1/1 から2020/1/31
までとなります。
DateSerial(2020, i - 6, 1)だと正しくなりません。
偶然発見したのです。
わかる方おしえてくれませんでしょうか

Sub ci()
Dim i, j As Long
Dim sumR As Range
Dim NameR As Range

Set sR = Range("D4:D21") '金額
Set NameR = Range("C4:C21") '商品
For i = 6 To 10
Cells(i, "G").Value = WorksheetFunction.SumIfs(sR, NameR, Cells(i, "F"), _
Range("A4:A21"), ">=" & DateSerial(2020, i - 54, 1), Range("A4:A21"), "<" & DateSerial(2020, 1, 31))
Cells(i, "H").Value = WorksheetFunction.CountIfs(NameR, Cells(i, "F"))

Next

End Sub

「SumIFsとDateSerial vb」の質問画像

A 回答 (1件)

こんばんは!



直接の回答ではありません。
コードで理解できない部分があるので、少しだけ・・・

DateSerial関数で
>DateSerial(2020, i - 54, 1)
のような書き方をされていますね。

DateSerial(Year,Month,Day)
となりますので、Monthの部分は1~12の数値になるのが一般的です。

お示しのコードでは「i」は6~10までの変数としていますよね。
(おそらく6行目~10行目までとしたいと思います)
仮に i=6 の場合 Monthの部分は -48 となりますね。
Excel的には 2015/12/1 というシリアル値として処理してくれますので
エラーもなく4年以上前からのデータも拾ってくれると思います。

ちなみに 
DateSerial(2020, 0, 1)
とすれば 2019/12/1 のシリアル値になります。

※ 余計なお世話かもしれませんが、
変数の宣言部分の
>Dim i, j As Long

>Dim i As Long
>Dim j As Long
のように宣言した方が良いと思います。

Dimを何度も入力するのが嫌なら
>Dim i As Long, j As Long
のようにしても構いませんので、一つずつ丁寧に宣言するコトをおススメします。

大勢に影響はありませんが、
お示しの宣言方法だと
「i」は型を宣言していないコトになり、Variant型での変数になります。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました。
dim m as long
m = 1
Range("A4:A21"), ">=" & DateSerial(2020, m, 1),
Range("A4:A21"), "<" & DateSerial(2020, m+1, 0))
---略
Next
m = m +1
にしました。

お礼日時:2020/01/21 22:04

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