[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『製品コード別集計方法』(信州)
週単位でアップデートされる製品の売上金額をVBAで製品コードの左端のアルファベット群毎にAVG、MAX、MINを算出して 別シートに記録したいのですが、VBA記述がわかりません。どなたか知恵を貸して頂けませんか? (現在は手動でいちいち算出する、という面倒な事をやっている為・・・)
A B C 1 製品コード 製造メーカー 売上金額 2 ABC-1 アンテナ 250000 3 AB-DS アンテナ 150000 4 CNG-1A 坂本精密 900000 5 C3-6 日本産業 4000000 6 HNP-87 群馬精密 1625000 8 ZFGED ラーメン堂 1575000 9 CLOP 胴元産業 1750000 10 HHH-HA ヘテロ産業 10800000 11 ZOLO-78 坂本精密 25200000 12 C6-67 日本産業 2450000 13 CAMO-6 カメラ工業 2500000 14 CAPE-8 カメラ工業 12800000 15 Z890 Z工業 11570000 16 Z956 Z工業 23900000 17 HARRY ヘテロ産業 1800000
製品コード別に並べ替えて
製品コード 製造メーカー 金額 ABC-1 アンテナ 250000 AB-DS アンテナ 150000 C3-6 日本産業 4000000 C6-67 日本産業 2450000 CAMO-6 カメラ工業 22500000 CAPE-8 カメラ工業 12800000 CLOP 胴元産業 1750000 CNG-1A 坂本精密 900000 HARRY ヘテロ産業 1800000 HHH-HA ヘテロ産 10800000 HNP-87 群馬精密 1625000 Z890 Z工業 11570000 Z956 Z工業 23900000 ZFGED ラーメン堂 1575000 ZOLO-78 坂本精密 25200000
アルファベット順に並べ替えた製品コードをアルファベット群毎にAVG,MAX,MINを求め、それを別シートに記録したいのです。
A B C 1 A AVG : Aは製品コードの左端の頭文字 2 A MAX 3 A MIN 4 5 C AVG : Cは製品コードの左端の頭文字 6 C MAX 7 C MIN 8 9 H AVG 10 H MAX 11 H MIN 12 13 Z AVG 14 Z MAX 15 Z MIN 16 17 全体の AVG 18 全体の MAX 19 全体の MIN
Excel2000, OS:Windows2000
「別シート」はすでに用意されているものでしょうか。 コードを作成するつもりはありませんが、アイデアだけ提示。 (1)元のデータへ(別にどこでも良いのだけど)作業列を設定。 (2)作業列にLEFT関数で先頭の文字列だけ抽出。 (3)フィルタオプションで重複のない先頭文字列をさらに別の範囲へリストアップ。 (4)リストアップした物を並べ替え (5)先頭文字列のリストを順番にオートフィルタで作業列をフィルタリング。 (6)フィルタされたデータに対してWorksheetFunctionのSubtotal関数で計算し 指定のセル位置へその値を返す。 (7)リストアップした先頭文字の数だけ(5)(6)を繰り返す。 (8)作業列を削除。 という具合のコードを作成する。 ついでにマクロによらない方法。 (1)並べ替えは完了しているとして、C列を挿入。 (2)一行目に適当な見出しを作成して 二行目に =LEFT(B2) としてA列の先頭文字を抽出。 この式をデータ数分、フィルコピー。 (3)データ範囲を選択するか、範囲内の任意の一セルを選択した状態で (4)データ>集計 でグループの基準に作業列を指定、 集計の方法に「平均」を選択、 集計するフィールドで「金額」にチェック。 「現在の集計表と置き換える」のチェックをはずしてOK。 (5)「最大値」「最小値」について集計作業を繰り返し、A列B列を非表示、 (6)アウトライン第2レベルで折りたたむと、次のような集計表が出来上がります。 区分 金額 A 平均 200000 A 最大値 250000 A 最小値 150000 C 平均 7400000 C 最大値 22500000 C 最小値 900000 H 平均 4741666.667 H 最大値 10800000 H 最小値 1625000 Z 平均 15561250 Z 最大値 25200000 Z 最小値 1575000 全体の平均 8084666.667 全体の最大値 25200000 全体の最小値 150000 ちょっと出来上がりは違いますが。 (みやほりん)(-_∂)b
こんばんは〜♪
ピボットテーブルは、いかがでしょうか?
A B C D [1] 製品コード 製造メーカー 売上金額 先頭コード [2] ABC-1 アンテナ 250000 A [3] AB-DS アンテナ 150000 A [4] C3-6 日本産業 900000 C [5] C6-67 日本産業 400000 C [6] CAMO-6 カメラ工業 162500 C
>製品コード別に並べ替えて
別シートへ並べ替えるのでしょうか? ★元データを別シートへ、コピぺしてから 並べ替え?
★みやほりんさんと同じく D列に作業列を作ります。 D2 =LEFT(B2) 下へコピー。
★ピボットテーブルから (1)ウィザード1/3 →次へ (2)ウィザード2/3 範囲→先頭行からデータ行をまでの範囲を選択(ドラッグ)
(3)ウィザード3/3 レイアウトから 行→先頭コードをドラッグ データ→売上金額を3つドラッグ で、OK
(4)作成先は、お好みに。 完了
★データの列の下の3行を順番に 右クリックで、フィールドの設定で 平均 最大値 最小値を選択します。
こんな感じに出来上がります 元データの金額を少し変えてしまったので みやほりんさんと集計金額が違いますが
先頭コード データ 集計 A 最大値 / 売上金額 250000 最小値 / 売上金額2 150000 平均 / 売上金額3 200000 C 最大値 / 売上金額 12800000 最小値 / 売上金額2 900000 平均 / 売上金額3 4066666.667 H 最大値 / 売上金額 10800000 最小値 / 売上金額2 1625000 平均 / 売上金額3 4741666.667 Z 最大値 / 売上金額 25200000 最小値 / 売上金額2 1575000 平均 / 売上金額3 15561250 全体の 最大値 / 売上金額 25200000 全体の 最小値 / 売上金額2 150000 全体の 平均 / 売上金額3 6751333.333
ご参考にどうぞ〜。。。 Ms.Rinでした〜♪♪
みやほりんさん、Ms.Rinさん、アドバイス有難うございます。 午後、又レスします。 めずらしく雨が降っている標高1,000mの信州でした。
ピボットテーブルでの作成、初めてでしたのでこういうやり方もあるんだ!と知り、目からうろこが落ちる思いでした・・・ 便利ですね〜。この作業をマクロ化して、週単位でアップデートするアルファベット群別集計に使えるかこれから試してみます。 信州
アルファベット群に並べ替えるマクロをVBA化しようと思い、下記のコードを記述して実行したのですが、エラーになり、 うまくいきませんでした。どこに問題があるでしょうか?
Sub 先頭コード作成2() Dim n As Integer n = Count.Formula("A:A") Range("D2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-3])" Range("D2").Select Selection.AutoFill Destination:=Range("D2:D" & "n"), Type:=xlFillDefault Range("D2:D" & "n").Select Range("E1").Select End Sub
信州
n = Count.Formula("A:A") これは、最終行までの行数をカウントしようとしているのでしょうか。 A列に歯抜けデータがないという前提なら、 n = WorksheetFunction.CountA(Range("A:A")) などで取得できます。 (みやほりん)(-_∂)b
みやりほんさん、ありがとうございます。 これからチャレンジしてみます。 信州
ピボットテーブル利用の方針なら、並べ替えは必要ないような気もします。 (みやほりん)(-_∂)b
ピボットテーブルを活用したマクロ化であれば、日々のアップデートにも対応可能ですか?その辺がよくわからないのですが・・ ***** 雪が降り始めた信州でした ****
マクロなら大抵のことはできると思いますが、 「アップデート」が具体的にどのような手順によるものか、 また、集計を作成するシートが固定されたものなのか、それとも新規に追加していくのか、 など不明な点がたくさんあるので具体的なアドバイスが差し上げにくいのです。 (みやほりん)(-_∂)b 年末業務多忙のため、たぶん次回のレスは年明けです。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.