アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前頂戴致しましたコードです。
ありがとうございました
質問があります。

下記の解釈まちがっていますでしょぅか。


 m = Month(.Cells(i, "A").Value) - 4 '-------------1,2,3,4月だったら -3 -2 -1 0
 If (m < 0) Then m = m + 12 '--------
mがm<0だったらなので--1月+12 =13ということは 対象月は1から3月まででよろしいでしょうか

13列目からだけど8列が4月なので違うのです。
おしえてくれませんでしょうか

1月はZ列AA列
--------------------------------------------------------------------------
すみません。なにを質問しているのかわかりませんね。
下記のコードの解釈おしえてくれませんでしょうか

 m = Month(.Cells(i, "A").Value) - 4 '-------------1,2,3,4月だったら -3 -2 -1 0
 If (m < 0) Then m = m + 12

Option Explicit

Public Sub Samp1()
  Const CPC As Long = 1000 ' 最大人数
  Dim dic As Object
  Dim sA(1 To CPC, 1 To 1) As String
  Dim jA(1 To CPC, 1 To 24) As Long ' 件数、金額 x 12 組
  Dim vK As Variant
  Dim i As Long, j As Long, k As Long, n As Long, m As Long

  Set dic = CreateObject("Scripting.Dictionary")

  n = 0
  With ActiveSheet
    For i = 2 To .Cells(Rows.count, "A").End(xlUp).Row
      vK = .Cells(i, "D").Value
      m = Month(.Cells(i, "A").Value) - 4 '-------------1,2,3,4月だったら -3 -2 -1 0
      If (m < 0) Then m = m + 12 '--------mがm<0だったらなので--1+12 =13
      j = m * 2 + 1     '        
      k = dic(vK)

      If (k = 0) Then
        n = n + 1
        k = n
        dic(vK) = k
        sA(k, 1) = vK
      End If
      jA(k, j) = jA(k, j) + 1
      jA(k, j + 1) = jA(k, j + 1) + .Cells(i, "E").Value
    Next

    If (n > 0) Then
      Application.ScreenUpdating = False
      With .Range("G3").Resize(n, 25)
        .Columns(1).Value = sA
        .Columns(2).Resize(, 24).Value = jA
        .Sort .Cells(1), xlAscending, Header:=xlNo
      End With
      Application.ScreenUpdating = True
    End If
  End With

  Set dic = Nothing
End Sub

「("Scripting.Dictiona」の質問画像

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

  • jA(k, j) = jA(k, j) + 1
     jA(k, j + 1) = jA(k, j + 1) + .Cells(i, "E").Value
    画像とは逆になっています。

      補足日時:2020/03/23 23:34

A 回答 (2件)

まず。


・表題の『Dictionaryオブジェクト』はこの質問とは関係ないです。
・『以前頂戴した回答』と言う場合、質問者さんの質問履歴を非公開にされているのなら少なくともその時の質問のリンクを貼って頂けると回答する側がわかりやすい時もあります。
今回のはたまたま15年も前には既に使われてた方法なので構わないですけどね。

>If (m < 0) Then m = m + 12 '--------mがm<0だったらなので--1+12 =13

m<0が成立する場合、それは m が -3,-2,-1 の時ですから +12 をすれば 9,10,11 になりますよ?
ここを勘違い(?)されると後が混乱します。(多分)

この回答自体は1月開始ではなく『4月~翌年3月』に対応したものであるためですね。
インデックスの最小値を共に『1』とする変数:Dim jA(1 To CPC, 1 To 24) As Long ' 件数、金額 x 12 組 に代入するため画像のように補正を進めたのでしょう。
「("Scripting.Dictiona」の回答画像1
    • good
    • 0
この回答へのお礼

いつも有難うございます。
以前頂戴した回答』と言う場合、質問者さんの質問履歴を非公開にされているのなら
>かしこまりました。
インデックスの最小値を共に『1』とする変数:
Dim jA(1 To CPC, 1 To 24) As Long ' 件数、金額 x 12 組 に代入するため
>JAに代入 わたし勘違いしてました。 わかりました。
とんでもない勘違いしてました。
勉強になりました。

お礼日時:2020/03/24 09:12

No.1です。



コードで気になる点は、

>k = dic(vK)

ここですかね。
本来Dictionaryオブジェクトに登録されているキーに対してのアイテムを与えるならわかるのですが、キー・アイテムを登録する前に実行されてしまう点です。
こう言う使い方は今まで諸先輩方の回答でも見てきた事がないので不思議でしたね。
Dictionaryクラスならエラーになるのでステップアップされるつもりか否かで参考とすべきかは考えるべきかも。
    • good
    • 0
この回答へのお礼

いつも有難うございます。
>k = dic(vK)
かしこまりました。
めぐみん様の方法でやりますのでこのコードは
こういうやり方もあるのだなということで
おわりにします。
ありがとうございました

お礼日時:2020/03/24 09:16

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