痔になりやすい生活習慣とは?

いつもお世話になっております
以前、某氏から頂戴しましたコードです。
一つ条件を設定したいのですが、

下のコードはわたしがかんがえたのですが、

Dim RR As Range
For Each RR In Range("a2", Cells(Rows.count, 1).End(xlUp))
If RR.Value >= DateSerial(2019, 4, 1) And RR.Value <= DateSerial(2019, 9, 30) Then
mm = Month(Cells(wrow, "A").Value) '????Z?o
End If
Next

mm = Month(Cells(wrow, "A").Value) '月を算出

上手くいきません。
条件を2019/4/1から2019/9/30までとしたいのです。
おしえてくれませんでしょうか

Sub 集計()
Dim dicT As Object
Dim maxrow As Long
Dim wrow As Long
Dim wcol As Long
Const max_person As Long = 1000 '最大人数
Dim price(max_person, 12) As Long '金額
Dim count(max_person, 12) As Long '件数
Dim pix As Long 'price&countへのindex
Dim ix As Long 'price&countへのindex
Dim key As Variant
Dim mm As Long
Dim cx As Long
pix = 1
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
maxrow = Cells(Rows.count, 1).End(xlUp).Row '1列目の最終行を求める
For wrow = 2 To maxrow
key = Cells(wrow, "D").Value
If dicT.exists(key) = True Then
ix = dicT(key)
Else
dicT(key) = pix
ix = pix
pix = pix + 1
End If
mm = Month(Cells(wrow, "A").Value) '月を算出
price(ix, mm) = price(ix, mm) + Cells(wrow, "E").Value '金額加算
count(ix, mm) = count(ix, mm) + 1 '件数加算
Next
wrow = 3

For Each key In dicT
ix = dicT(key)
Cells(wrow, "G").Value = key '①追加

For mm = 1 To 12
cx = mm - 4

If cx < 0 Then cx = cx + 12
wcol = 8 + 2 * cx

Cells(wrow, wcol).Value = count(ix, mm) '件数設定
Cells(wrow, wcol + 1).Value = price(ix, mm) '金額設定
Next

wrow = wrow + 1
Next
End Sub

質問者からの補足コメント

  • うーん・・・

    申し訳ございませんでした。
    mm = Month(Cells(wrow, "A").Value) '月を算出
    この部分はA列に2018/4/1から2019/7/10
    までデータがあります。ただ、某氏におしえてもらったコードは
    単に2018年2019年に関係なく4月から3月のデータを抽出するようになっています。
    そこで、For Each RR In Range("a2", Cells(Rows.count, 1).End(xlUp))
    If RR.Value >= DateSerial(2019, 4, 1) And RR.Value <= DateSerial(2019, 9, 30) Then
    mm = Month(Cells(wrow, "A").Value)
    End If
    Next
    このコードを利用してできないかと考えましたが、
    全く、同じ答えになりました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/07/10 20:46
  • うーん・・・

    確認致しました。
    問題なく、日付です。
    もしかするとFor Each RR In Range("a2", Cells(Rows.count, 1).End(xlUp))
    If RR.Value >= DateSerial(2019, 4, 1) And RR.Value <= DateSerial(2019, 9, 30) Then
    のRR.valueの部分問題あるのですかMonth(rr.value)???

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/07/10 20:50
  • うーん・・・

    申し訳ございません
    確認いたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/07/10 22:15

A 回答 (4件)

ですから、どこをそのコードに直したのですか?



mm=Month(...)のところをそれにしたのならダメですよ。
For文とか使わずに

mm=Month(Cells(wrow, “A”).Value)
price....
count....
のところを

If wrow.Value >=DateSerial(2019, 4, 1) And .... Then
mm =Month(..
price ..
count...
End If

としたらできるんじゃないですか?
    • good
    • 0
この回答へのお礼

ありがとうございます
助かりました申し訳けございませんでした

お礼日時:2019/07/10 23:30

No.2です。



どこにどのように組み込みたいのかわかりませんが、 .Value を .Value2 にて If 文で判定してみるとか?
問題の切り分けはメッセージボックスでもイミディエイトウィンドウに出力でも良いですが、If文がちゃんと判定されてるかは確認すべきかもです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

いつもお世話になっております
ありがとうございます

お礼日時:2019/07/11 22:52

・Scripting.Dictionary わかる方



とあって問題は日付の『月』についてなのですか?
セルの値が日付に見えるけど実は文字列だったりとかはないのでしょうか?(本当にシリアル値なのかどうか)
多分コードよりデータの方に何かあるようには思えますけど。
この回答への補足あり
    • good
    • 0
この回答へのお礼

いつもお世話になっております
ありがとうございます

お礼日時:2019/07/11 22:53

どこを上のコードに直したんですか?


どこがどのようにうまくいかないんですか?

ちゃんと必要なことは書いてから質問してください。
とても答えづらいです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2019/07/11 22:53

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング