アプリ版:「スタンプのみでお礼する」機能のリリースについて

営業成績のランキング表をエクセルで作りたいです。
当然のことながら、手作業ではなく一瞬で変換する方法です。
基本的なことで恐縮ですが、、作成方法教えてください。
よろしくお願いします。
(いつもはピボットテーブルで作成していましたが、エクセルでのランキング表を希望しています)

山田 太郎 北口支店 500
木村 次郎 西山支店 200
山田 太郎 北口支店 300
佐藤 三郎 東支店  1000
佐藤 三郎 東支店   200
山田 太郎 北口支店 600
(実際は膨大なデータです)



1位 山田太郎 北口支店 1400
2位 佐藤三郎 東支店   1200
3位 木村次郎 西山支店  200
 

A 回答 (6件)

》 …一瞬で変換する方法です


「ピボットテーブル」以外の「一瞬で変換する方法」とは、マクロによる方法をご所望ですか?
どの程度の「一瞬」なんでしょ?
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/09/15 15:21

こんにちは!



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
「営業成績ランキング表(エクセル)」の回答画像2
    • good
    • 0
この回答へのお礼

あ、ありがとうございます。
VBAは使ったことがないので、申し訳ないんですがAlt+F11キー → メニュー・・・ここで脱落しました。メニューボタンがない・・・。

それより、もっと平易な方法はないのでしょうか?
やはりピボットテーブルでやるべきなのでしょうか。
(エクセルでないとその後の変更、加工がやりづらくて仕方ないので質問しました。)
 

お礼日時:2014/09/15 15:29

関数で対応するなら、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ソフトはバージョンによって使用できる機能や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。
「営業成績ランキング表(エクセル)」の回答画像3
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2014/09/15 18:31

No.2です。



>それより、もっと平易な方法はないのでしょうか?

No.3さんが的確な回答をしてくださっていますので、
関数で処理する場合はNo.3さんのような方法になると思います。

>VBAは使ったことがないので、申し訳ないんですがAlt+F11キー → メニュー・・・ここで脱落しま>した。メニューボタンがない・・・。
ここからは試しだと思ってトライしてみてください。

まず、前回のコードを画面上で範囲選択(ドラッグ) → 右クリック → コピー
次にAlt+F11キー → メニューバーの中に「挿入」という項目がありますので、それをクリック
→ そうすると「プロシージャ」・「ユーザーフォーム」という項目が表示されます。
その中に「標準モジュール」がありますので、それをクリック → 白いVBE画面が表示され、カーソルが点滅しています。
白い画面上で右クリック → 貼り付け
これで完了です。

後はExcel画面(Sheet1)に戻って
Alt+F8キー → マクロ名が表示されている画面が表示されますので、「実行」をクリックしてみてください。

※ Sheet1のSheet名はそのまま「Sheet1」という前提のコードです。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2014/09/15 18:35

多分、貴方はピボテの並べ替えをご存じない?


ピボテを作成すると Fig-1 の右図のようになると思います。
(但し、Nameフィールドの集計なし、書式オプションの“列の総計”なし、に設定)

ピボテ内にマウスカーソルを置いて、
1.[ピボットテーブル]→[並べ替えでトップテンを表示]を実行
2.[自動並べ替えオプション]で“降順”を選択
3.[使用するフィールド]で“合計/Amt”を選択
すると、「一瞬で」Fig-2 が得られますけどォ~
「営業成績ランキング表(エクセル)」の回答画像5
    • good
    • 0

データにタイトルを追加して、


名前 支店 金額
山田太郎 北口支店 500

データをT1へ登録して、以下のSQLを実行する

SELECT
T1."名前",
T1."支店",
SUM(T1."金額")
FROM T1
GROUP BY
T1."名前",
T1."支店"
ORDER BY
SUM(T1."金額") DESC
「営業成績ランキング表(エクセル)」の回答画像6
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!