[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『月単位で日付に順番をつける』(みりん)
データを入力する Sheet1 から、Sheet2 に月別の集計表を作成します。 以下の様に、日付が重複する場合もあり、重複したデータは列を変えて同行に集計します。 Sheet2 は、月や類別を変えて Sheet1 のデータを抽出できれば、と思います。
Sheet2 に日付を固定できれば集約できそうなんですが、 日付がランダム且つ抜けや重複もあり、つたない知識で困難を極めております。 こちらで検索しても、キーワードにヒットせず徒労に終わりました(T_T) Sheet1 に作業列があっても問題ないので、ご教示ください。
【Sheet1】 A列 B列 C列 日付 類別 数量 H23.4.15 山 2.0 H23.4.20 森 1.5 H23.4.29 山 0.5 H23.4.29 森 2.5 H23.5.5 山 1.5 H23.5.5 山 1.0 H23.5.5 森 2.0 H23.5.11 森 0.5 H23.5.11 森 1.5 H23.5.21 山 0.5 H23.7.10 森 0.5 H23.7.11 森 2.0
【Sheet2】(例:4月 山 集計) A列 B列 C列 4月 類別 数量 H23.4.15 山 2.0 H23.4.29 山 0.5
【Sheet2】(例:5月 森 集計) A列 B列 C列 D列 4月 類別 数量 H23.5.5 森 2.0 H23.5.11 森 0.5 1.5
こんな事になるのかな ? Sheet1 の、Cells(1,"e") で、月を数値で指定 例: 5 、Cells(1,"f") で、種別を指定 例: 森 結果は、Sheet2 へ表示されます。
Sub test()
Dim i&, j&, D As Object, v, w
Dim Mo&, Na$, n&, S
Set D = CreateObject("scripting.dictionary")
With Sheets("Sheet1")
Mo = .Cells(1, "e").Value '月
Na = .Cells(1, "f").Value '種別
v = .Cells(1, 1).CurrentRegion.Value
For i = 2 To UBound(v)
If Month(v(i, 1)) = Mo And v(i, 2) = Na Then
D(v(i, 1)) = D(v(i, 1)) & "," & v(i, 3)
End If
Next
End With
n = 1
With Sheets("sheet2")
.Cells(1, 1).CurrentRegion.Offset(1).ClearContents
For Each w In D.keys
n = n + 1
.Cells(n, 1).Value = w
.Cells(n, 2).Value = Na
S = Split(D(w), ",")
For j = 1 To UBound(S)
.Cells(n, 2 + j).Value = S(j)
Next
Next
End With
Set D = Nothing
End Sub
(HM)
関数では難しいでしょうか? マクロにもあまり明るくないので、集計項目を追加された時に対処できないので‥ (みりん)
>Sheet1 に作業列があっても問題ないので、ご教示ください。
作業列あったほうが分かりやすいと思うんでこれで。
○Sheet2のA1に月(文字列)、B2に類別。
○Sheet1に作業列。 D2 =IF(MONTH(A2)&"月"=Sheet2!$A$1,IF(B2=Sheet2!$B$2,A2,""),"") E2 =IF(MONTH(A2)&"月"=Sheet2!$A$1,IF(B2=Sheet2!$B$2,C2,""),"") D2:E2 下へコピー。
○Sheet2 A2 =IF(COUNT(Sheet1!D:D)<ROW(A1),"",SMALL(Sheet1!D:D,ROW(A1))) C2 =IF(B2="","",SUMIF(Sheet1!D:D,A2,Sheet1!E:E)) A2:C2 下へコピー。
B3 =IF(A3="","",B2) 下へコピー。
※Sheet1 年度複数の月度ないこと。
(GobGob)
ご提示くださった関数でうまく集約できないのですが、 参考にして完成したいと思います。 (みりん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.