|
▼kanabun様
元データに配列を格納の箇所をご教示願えないでしょうか?
お手数ですが、宜しくお願いいたします。
>別法で、連想配列で仕分けしておいて、結果の配列だけをシートに値転記
>する方法です。(つまり、シートに数式を埋め込んでいません)
>
>Sub Try1() 'by dictionary
> Dim aryDate
> Dim aryKind
> Dim r As Range
> Dim dic As Object
> Dim ss As String, sDate As String
> Dim i As Long, j As Long
> Dim xx As Long
> Const yy = 5 'A,B,C,D,E 5種類
>
> '元データを配列に格納
> Set r = Range("D8", Cells(Rows.Count, "D").End(xlUp))
→変数rにDの最終行からD8までを代入する。
> aryDate = Application.Text(r, "mmdd")
→変数aryDateは、変数rに代入した配列の表示形式をmmddとする?
→"mmdd"とは〇〇月〇〇日のことでしょうか?
→元データの表示形式は、2009/3/1です。その場合は"yyyymd"でいいので しょうか?
> aryKind = r.Offset(, Asc("I") - Asc("D")).Value
→変数aryKindには、変数rのどこがはいるんだろうか?
Range("A1").Offset(1,1)はB2ですよね?
Asc("I")-Asc("D")っていくつになるんですか?
> Set dic = CreateObject("Scripting.Dictionary")
> 'D列+I列 を結合したキーで出現回数カウント
> For i = 1 To UBound(aryDate)
> ss = aryDate(i, 1) & aryKind(i, 1)
> dic(ss) = dic(ss) + 1
> Next
>
> 'カウント結果を配列に出力
> Dim Kinds, Dates
> Kinds = Range("C2").Resize(yy).Value
> Dates = Application.Text( _
> Range("D1", Cells(1, Columns.Count).End(xlToLeft)), _
> "mmdd")
> xx = UBound(Dates)
> ReDim Ans(1 To yy, 1 To xx)
> For j = 1 To xx
> For i = 1 To yy
> ss = Dates(j) & Kinds(i, 1)
> If dic.Exists(ss) Then
> Ans(i, j) = dic(ss)
> End If
> Next
> Next
> Set dic = Nothing
> '結果をシートに出力
> Range("D2").Resize(yy, xx).Value = Ans
> MsgBox "完了"
>End Sub
|
|