[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『上位抽出』(ひろ)
下記表から上位10項目を別シートに抽出し、更に前月・前年同月との比較を行いたいのですが 何を使えばいいか分からず、皆様の知恵を借りさせて下さい。
品名 品番 19.8個数 19.8金額 20.7個数 20.7金額 20.8個数 20.8金額 りんご F 20 100 25 125 21 105 みかん D 10 100 15 150 13 130 バナナ R 5 20 10 40 4 16 ・ ・ ・
上記のような表から、 品名 品番 19.8金額 品名 品番 20.7金額 品名 品番 20.8金額 みかん D 100 みかん D 150 みかん D 130 りんご F 100 りんご F 125 りんご F 105 バナナ R 20 バナナ R 40 バナナ R 16 ・ ・ ・
といったように、それぞれの月に対して品名・品番・金額を上位10項目で返して、更に 品名 品番 20.8金額 20.7金額 19.8金額 みかん D 130 150 100 りんご F 105 125 100 バナナ R 16 40 20 ・ ・ ・
上記のように20.8を基準として、同じ品名が前月・前年同月いくらだったかを表示させたいのです。
アドバイスお願い致します。
(追記) 元データとなる表が期ごとに分かれているため、統合させずに式で参照出来れば幸いです。 19年8月は別シートにあり、20年度と比較すると品名の増減があります。 比較対象の無いものは0で返していただければと思います。
レスが付かないようなんで、スレ上げ兼冷やかしマクロです。 新しいブックで試してみませう。 Alt+F11→挿入→標準モジュールに下のコードをコピペ。 戻ってSheet1のA1からそれなりのデータを書き込みます。
Alt+F8でhiroを実行してみてくらはい。 Sheet2,Sheet3を開くと、どないでっか? (弥太郎)
'-------------- Sub hiro() Dim dic As Object, i As Long, u As Integer, f As Integer Dim tbl, x(1 To 10, 1 To 5), y(1 To 10, 1 To 9) Set dic = CreateObject("scripting.dictionary") Application.ScreenUpdating = False With Sheets("sheet1") tbl = .Range("a1").Resize(.Range("a" & Rows.Count).End(xlUp).Row, 8) End With Sheets.Add ActiveSheet.Name = "作業用" With Sheets("作業用") .Range("a1").Resize(UBound(tbl, 1), UBound(tbl, 2)) = tbl For u = 1 To 3 .Range("a1").Resize(UBound(tbl, 1), UBound(tbl, 2)).Sort _ key1:=.Cells(1, 2 + u * 2), Order1:=xlDescending tbl = .Range("a1").Resize(UBound(tbl, 1), UBound(tbl, 2)) f = IIf(u = 1, 1, IIf(u = 2, 4, 7)) For i = 2 To 11 y(i - 1, f) = tbl(i, 1) y(i - 1, f + 1) = tbl(i, 2) y(i - 1, f + 2) = tbl(i, 2 + u * 2) If u = 3 Then x(i - 1, 1) = tbl(i, 1) x(i - 1, 2) = tbl(i, 2) x(i - 1, 3) = tbl(i, 8) dic(tbl(i, 1)) = i - 1 End If Next i Next u With Sheets("sheet2") .Cells.ClearContents .Cells(1, 1).Resize(, 9) = Array("品名", "品番", tbl(1, 4), "品名", "品番", _ tbl(1, 6), "品名", "品番", tbl(1, 8)) .Cells(2, 1).Resize(UBound(y, 1), UBound(y, 2)) = y End With For u = 2 To 3 For i = 2 To UBound(tbl, 1) If dic.exists(tbl(i, 1)) Then x(dic(tbl(i, 1)), u + 2) = tbl(i, 10 - u * 2) End If Next i Next u End With With Sheets("sheet3") .Cells.ClearContents .Range("a1").Resize(, 5) = Array("品名", "品番", tbl(1, 8), tbl(1, 6), tbl(1, 4)) .Range("a2").Resize(UBound(x, 1), UBound(x, 2)) = x End With Application.DisplayAlerts = False Sheets("作業用").Delete Application.ScreenUpdating = True End Sub
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.