• 締切済み

営業成績ランキング表(エクセル)

営業成績のランキング表をエクセルで作りたいです。 当然のことながら、手作業ではなく一瞬で変換する方法です。 基本的なことで恐縮ですが、、作成方法教えてください。 よろしくお願いします。 (いつもはピボットテーブルで作成していましたが、エクセルでのランキング表を希望しています) 山田 太郎 北口支店 500 木村 次郎 西山支店 200 山田 太郎 北口支店 300 佐藤 三郎 東支店  1000 佐藤 三郎 東支店   200 山田 太郎 北口支店 600 (実際は膨大なデータです) ↓ 1位 山田太郎 北口支店 1400 2位 佐藤三郎 東支店   1200 3位 木村次郎 西山支店  200  

みんなの回答

回答No.6

データにタイトルを追加して、 名前 支店 金額 山田太郎 北口支店 500 データをT1へ登録して、以下のSQLを実行する SELECT T1."名前", T1."支店", SUM(T1."金額") FROM T1 GROUP BY T1."名前", T1."支店" ORDER BY SUM(T1."金額") DESC

noname#204879
noname#204879
回答No.5

多分、貴方はピボテの並べ替えをご存じない? ピボテを作成すると Fig-1 の右図のようになると思います。 (但し、Nameフィールドの集計なし、書式オプションの“列の総計”なし、に設定) ピボテ内にマウスカーソルを置いて、 1.[ピボットテーブル]→[並べ替えでトップテンを表示]を実行 2.[自動並べ替えオプション]で“降順”を選択 3.[使用するフィールド]で“合計/Amt”を選択 すると、「一瞬で」Fig-2 が得られますけどォ~

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です。 >それより、もっと平易な方法はないのでしょうか? No.3さんが的確な回答をしてくださっていますので、 関数で処理する場合はNo.3さんのような方法になると思います。 >VBAは使ったことがないので、申し訳ないんですがAlt+F11キー → メニュー・・・ここで脱落しま>した。メニューボタンがない・・・。 ここからは試しだと思ってトライしてみてください。 まず、前回のコードを画面上で範囲選択(ドラッグ) → 右クリック → コピー 次にAlt+F11キー → メニューバーの中に「挿入」という項目がありますので、それをクリック → そうすると「プロシージャ」・「ユーザーフォーム」という項目が表示されます。 その中に「標準モジュール」がありますので、それをクリック → 白いVBE画面が表示され、カーソルが点滅しています。 白い画面上で右クリック → 貼り付け これで完了です。 後はExcel画面(Sheet1)に戻って Alt+F8キー → マクロ名が表示されている画面が表示されますので、「実行」をクリックしてみてください。 ※ Sheet1のSheet名はそのまま「Sheet1」という前提のコードです。m(_ _)m

kdsalad00
質問者

お礼

ありがとうございます。 質問しておきながら・・・ですが いったんピボットデーブルで作成、「値貼り付け」でエクセルに展開、罫線付けてエクセルのランキング表作成・・・が一番手っとり早いですかね。 数百のデータも1分以内にエクセル化できちゃいますので。(ちょっと手作業っぽいですが)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

関数で対応するなら、D列を補助列にした以下のような手順が簡単です。 D2セルに以下の式を入力して下方向にオートフィルコピー。 =IF(COUNTIF($B$2:B2,B2)=1,SUMIF($A$2:$A$1000,A2,$C$2:$C$1000)+ROW()*10^-10,"") G2セルに以下の式を入力し、右方向に1つ下方向に適当数オートフィルコピー。 =IFERROR(INDEX(A:A,MATCH(LARGE($D$2:$D$1000,ROW(A1)),$D$2:$D$1000,0)+1),"") I2セルに以下の式を入力し下方向にオートフィルコピー =IFERROR(INT(LARGE($D$2:$D$1000,ROW(A1))),"") 順位のF2セルには以下の式を入力し下方向にオートフィルコピー =IFERROR(RANK(I2,$H$2:$I$1000),"") #ご使用のエクセルのバージョンが記載されていませんでしたので、ひとまずExcel2007以降のバージョンで対応できる数式にしました。 Officeソフトはバージョンによって使用できる機能や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

kdsalad00
質問者

お礼

ありがとうございます

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! VBAでの一例です。 元データはSheet1にあり、↓の画像のような配置になっているとして、 Sheet2に表示するとします。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻り、マクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim lastRow As Long, wS As Worksheet Set wS = Worksheets("Sheet1") With Worksheets("Sheet2") .Cells.Clear wS.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=.Range("B1"), unique:=True lastRow = .Cells(Rows.Count, "B").End(xlUp).Row With Range(.Cells(2, "C"), .Cells(lastRow, "C")) .Formula = "=SUMIF(Sheet1!A:A,B2,Sheet1!C:C)" .Value = .Value End With With Range(.Cells(2, "A"), .Cells(lastRow, "A")) .Formula = "=RANK(C2,C:C)" .NumberFormatLocal = "0位" End With .Range("A1") = "順位" .Range("C1") = "合計" With .Range("A1").CurrentRegion .Sort key1:=.Range("C1"), order1:=xlDescending, Header:=xlYes .Borders.LineStyle = xlContinuous .Columns.AutoFit End With End With End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m

kdsalad00
質問者

お礼

あ、ありがとうございます。 VBAは使ったことがないので、申し訳ないんですがAlt+F11キー → メニュー・・・ここで脱落しました。メニューボタンがない・・・。 それより、もっと平易な方法はないのでしょうか? やはりピボットテーブルでやるべきなのでしょうか。 (エクセルでないとその後の変更、加工がやりづらくて仕方ないので質問しました。)  

noname#204879
noname#204879
回答No.1

》 …一瞬で変換する方法です 「ピボットテーブル」以外の「一瞬で変換する方法」とは、マクロによる方法をご所望ですか? どの程度の「一瞬」なんでしょ?

kdsalad00
質問者

お礼

「手計算でそれぞれの実績を計算、打みなおして、ソートをかける・・・」(THE手作業)   この方法以外でもっと早い正確な方法を希望します。 10秒で、30秒で、ワンクリックで・・・という意味ではありません。