[[20071205122627]] 『複数シートの中の値にランクを付け、その値と別セ』(悩み太郎) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数シートの中の値にランクを付け、その値と別セルの文字、数値を返したい』(悩み太郎)

質問です。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

     A       B       C       D       E
    

〔1〕        東京大学    620     平均点      88 ←平均最終

〔2〕 初日目     165      95      95

〔3〕 2日目     155      88      91

〔4〕 3日目     170      70      84

〔5〕 4日目     130      99      88

〔6〕

          \東京大学/

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

     A       B       C       D       E
    

〔1〕       関東専門学院  730     平均点      59 ←平均最終

〔2〕 31日目     125      50      88

〔3〕 32日目     152      22      69

〔4〕 33日目     188      25      58

〔5〕 34日目     171      77      62

〔6〕 35日目     131      36      59

〔7〕

          \関東専門学院/

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

     A       B       C       D       E
    

〔1〕        サクラ学園   880     平均点      91 ←平均最終

〔2〕 15日目     250      99      88

〔3〕 16日目     210      88      88

〔4〕 17日目     202      97      90

〔5〕 18日目     199      79      89

〔6〕 19日目     260      91      90

〔7〕 20日目     270      92      91

          \サクラ学園/

    ・     ・     ・     ・

    ・     ・     ・     ・

    ・     ・     ・     ・

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
              
     

このような シートが 10個 位 あり

集計シートとして

      A        B       C       D       E
    

〔1〕最終平均ランク  平均得点   名前      得点計

〔2〕   1         91     サクラ学園   880

〔3〕   2         88     東京大学    620

〔4〕   3

〔5〕   4

〔6〕   5

〔7〕   6

          \集計/

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

このように作りたいのですが、\集計/の

 B列 の得点 91、88 は計算式を入れることが出来たのですが、

 C列 の名前 と D列 の得点計 がうまく出てきません。

"集計"シートの C列 と D列 にはどのような式を入れれば
いいでしょうか?

※個々の検索シートの行数は、バラバラです。その為もあり E2 へ

"平均最終"というセルを作っています。またシートは増やして行きたいと思っています。

作り直した方がよければ、そのアドバイスもお願いしたいのですが。マクロ以外でお願い

します。

質問が長くてすいません。

Excel2003 WindowsXP


 標準モジュールに貼り付けて下さい。

 Sub macro()
    Dim myws As Worksheet
    Dim ws As Worksheet
    Dim ten() As Long
    Dim aveten() As Long
    Dim i As Long
    Dim j As Long
    Dim shlname() As String
    i = 0
    Set myws = ThisWorkbook.Sheets("集計")
    For Each ws In Worksheets
        If ws.Name <> "集計" Then
            i = i + 1
            ReDim Preserve ten(i): ten(i) = ws.Range("C1")
            ReDim Preserve aveten(i): aveten(i) = ws.Range("E1")
            ReDim Preserve shlname(i): shlname(i) = ws.Range("B1")
        End If
    Next ws
    For j = 1 To i
        myws.Cells(j + 1, 1) = j
        myws.Cells(j + 1, 2) = aveten(j)
        myws.Cells(j + 1, 3) = shlname(j)
        myws.Cells(j + 1, 4) = ten(j)
    Next j
    myws.Range("B1", myws.Range("B1").End(xlDown).End(xlToRight)).Sort Key1:=Range("B2")
    Erase ten()
    Erase aveten()
    Erase shlname()
    Set myws = Nothing
 End Sub

 C列を導く関数が浮かばなかったのでマクロで^^;

 (1or8)

 関数での方法です。作業域を使います。

          A                  B        C               D          E            F               G               H
 1   最終平均ランク        平均得点  名前           得点計                  名前           平均得点         得点計
 2        1                    91    サクラ学園       880                  東京大学           88               620
 3        2                    88    東京大学         620                  関東専門学院       59               730
 4        3                    59    関東専門学院     730                  サクラ学園         91               880

 F列からH列に各シートのデータを表示させます。順番はどんな順でも構いません。
 単純に =Sheet!東京大学B1 みたいな感じで。
 このあたりは手作業で稚拙な感じで申し訳ないです。

 C2=INDEX($F$2:$F$10,MATCH(LARGE($G$2:$G$10+ROW($G$2:$G$10)/100,A2),$G$2:$G$10+ROW($G$2:$G$10)/100,0))

 CtrlとShiftキーを押しながらEnterで確定して配列数式にします。
 C2を下にコピーしてください。
 平均得点が大きい順に名前が並びます。(同点の場合は、F列の上にある方が上位に)
 B列、D列は、C列をキーにVLOOKUPで求められます。
 (sato)


遅れました。 (1or8)様、(sato)様ありがとうございます。

マクロは勉強不足なので、関数でやりたいと思っています。

出来れば、違うやり方があれば、助かるのですが、

お願いします。 

(悩み太郎)


 >マクロは勉強不足なので、関数でやりたい
 >出来れば、違うやり方があれば
 satoさんの提示した方法は何がいけないの?
 (dack)

satoさんの方法で今集計を作成中です。
しかし、わがままですが、F列〜H列の作業が多くなるので・・・、
多少違うやり方が存在するかと、わずかな期待をしてしまいました(-_-;)。

↑(悩み太郎)↑でした。

 ちょっとだけ作業域を少なく (大学名=シート名の場合のみ有効です)
 sato さん同様、F列だけは地道に・・・
 G2=INDIRECT(F2&"!E1")
 B2=LARGE(G:G,A2)
 C2=INDEX(F:F,MATCH(B2,G:G,),)
 D2=INDIRECT(C2&"!C1")
 後は最終行までB2:D2,G2をコピー

 H列分少なく^^;

 (1or8)

 う、衝突。同様ですが、そのまま載せときます。

 手間を軽減できてるか否かは、感じ方次第という事で、
必要部分のみをまとめる方法です。

 	  平均得点	学校名	   得点計 ←ここは一目で分る為に 手入力
 Sheet名	     E1	           B1	     C1  ←ここは、該当セルを手入力
 東京大学	     88	         東京大学	     620
 関東専門学院  59	        関東専門学院    730
 サクラ学園    91	         サクラ学園     880
  ↑
 各シート名を手入力するか、↓こんな感じの式を作って、必要分を下方コピーし、
 =MID(CELL("filename",東京大学!A1),FIND("]",CELL("filename",東京大学!A1),1)+1,20)
                      ~~~~~~~~~~                            ~~~~~~~~~~       ==
~~~部分を差替えていく。(数式バーで選択し直す)。 ==は、シート名が20文字で足りなけければ増やして。
※各シートのB1セルで学校名を取り出すので、Sheet名と学校名は違っていても可。
んで、上の表がG1:J5の範囲にあるとして、
H3セルに↓を入力し、範囲にコピペ。
=INDIRECT("'"&$G3&"'!"&H$2)
(sin)

1or8様  sin様 衝突までしていただきありがとうございます。

いろいろあると嬉しいです(~o~)

参考になります。 いろいろ勉強できます。

衝突大歓迎!!です。

(悩み太郎)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.