• ベストアンサー

Excel 各クラスによるランキングの合計 VBA

団体は全部で12支部あります。 メン 1位 8点 2位 7点 3位 6点 4位 5点 以下各クラス(5つ) 1位 4点 2位 3点 3位 2点 4位 1点 リレー 1位 5点 2位 4点 3位 3点 4位 2点 5位 1点 Gセルに各順位、Iセルに各得点の合計で順位を並べたいです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1633/2477)
回答No.4

> 「コンパイルエラー > SubまたはFuncionが定義されていません」 > とエラーメッセージが出ます… どこで出るのか記載が無いと想像しかできません。 Function SetTotalRanking(ByVal tRow As Long) がないのではないですか。 同じなので省略してますから元のものを利用してください。

nkmyr
質問者

お礼

Function SetTotalRanking(ByVal tRow As Long) を追加しましたら、正常に動きました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1633/2477)
回答No.3

> リレーのところが5位までなのですが、4位までとなっていますが 画像が4位まででしたので他と合わせました。 > 4大会にした場合、 > LastRow = Cells(Rows.Count, "G").End(xlUp).Row > For j = tCol To tCol + 3 > としたのですが、正解でしょうか? そうですね。その上の For i = tRow To tRow + 8 Step 4 略 Next Range(Cells(tRow, "G"), Cells(tRow + 11, "G")).RemoveDuplicates Columns:=1, の部分も変更しないとデータのコピーが不足します。 一応、上記の部分を全て引数にして対応するコードにしてみました。 SetRanking内のコメントの部分が最初のコードでそこを変更しています。 (SetTotalRankingは変更がないので記載していません) Sub Test() Dim i As Long, j As Long, k As Long Dim LastRow As Long Range("G:J").ClearContents Range("G1").Value = "順位" Range("I1").Value = "総合順位" ' 説明 ここも変更 ' Call SetRanking(各データ最上部の行番号, 1大会の列番号, 最高得点,最下位,大会数) Call SetRanking(2, 3, 8, 4, 4) Call SetRanking(15, 3, 4, 4, 4) Call SetRanking(28, 3, 5, 5, 4) ' Call SetTotalRanking(データ最上部の行番号) Call SetTotalRanking(2) End Sub 'Function SetRanking(ByVal tRow As Long, ByVal tCol As Long, ByVal tScore As Long) Function SetRanking(ByVal tRow As Long, ByVal tCol As Long, ByVal tScore As Long, ByVal LRank As Long, ByVal NumT As Long) Dim i As Long, j As Long, k As Long Dim LastRow As Long j = tCol ' For i = tRow To tRow + 8 Step 4 For i = tRow To tRow + (LRank * NumT - LRank) Step LRank ' Cells(i, "G").Resize(4, 1).Value = Cells(tRow, j).Resize(4, 1).Value Cells(i, "G").Resize(LRank, 1).Value = Cells(tRow, j).Resize(LRank, 1).Value j = j + 1 Next 'Range(Cells(tRow, "G"), Cells(tRow + 11, "G")).RemoveDuplicates Columns:=1, Header:=xlNo Range(Cells(tRow, "G"), Cells(tRow + (NumT * LRank - 1), "G")).RemoveDuplicates Columns:=1, Header:=xlNo LastRow = Cells(Rows.Count, "G").End(xlUp).Row 'For j = tCol To tCol + 2 For j = tCol To tCol + (NumT - 1) 'For k = 1 To 4 For k = 1 To LRank For i = tRow To LastRow If Cells(k + (tRow - 1), j).Value = Cells(i, "G").Value Then Cells(i, "H").Value = Cells(i, "H").Value + (tScore + 1 - k) Exit For End If Next i Next k Next j Range(Cells(tRow, "G"), Cells(LastRow, "H")).Sort _ Key1:=Cells(tRow, "H"), Order1:=xlDescending, _ Header:=xlNo End Function

nkmyr
質問者

お礼

ありがとうございます。 実行してみましたところ、 「コンパイルエラー SubまたはFuncionが定義されていません」 とエラーメッセージが出ます…

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1633/2477)
回答No.2

画像を削除したほうの質問は回答が付かない間に削除したほうがいいと思います。回答が付くと削除できなくなります。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1633/2477)
回答No.1

前回の回答を一部変更したものです。 > 団体は全部で12支部あります。 > 以下各クラス(5つ) この点がよくわかりませんので、画像の状態での結果です。 A列の点表示はその点数で計算しているという事ですが、目視点検用に入れていますので、なくても問題はありません。 一部県名を変更しています。 Sub Test() Dim i As Long, j As Long, k As Long Dim LastRow As Long Range("G:J").ClearContents Range("G1").Value = "順位" Range("I1").Value = "総合順位" ' 説明 ' Call SetRanking(各データ最上部の行番号, 1大会の列番号, 最高得点) Call SetRanking(2, 3, 8) Call SetRanking(15, 3, 4) Call SetRanking(28, 3, 5) ' Call SetTotalRanking(データ最上部の行番号) Call SetTotalRanking(2) End Sub Function SetRanking(ByVal tRow As Long, ByVal tCol As Long, ByVal tScore As Long) Dim i As Long, j As Long, k As Long Dim LastRow As Long j = tCol For i = tRow To tRow + 8 Step 4 Cells(i, "G").Resize(4, 1).Value = Cells(tRow, j).Resize(4, 1).Value j = j + 1 Next Range(Cells(tRow, "G"), Cells(tRow + 11, "G")).RemoveDuplicates Columns:=1, Header:=xlNo LastRow = Cells(Rows.Count, "G").End(xlUp).Row For j = tCol To tCol + 2 For k = 1 To 4 For i = tRow To LastRow If Cells(k + (tRow - 1), j).Value = Cells(i, "G").Value Then Cells(i, "H").Value = Cells(i, "H").Value + (tScore + 1 - k) Exit For End If Next i Next k Next j Range(Cells(tRow, "G"), Cells(LastRow, "H")).Sort _ Key1:=Cells(tRow, "H"), Order1:=xlDescending, _ Header:=xlNo End Function Function SetTotalRanking(ByVal tRow As Long) Dim i As Long, j As Long, k As Long Dim LastRowI As Long, LastRowG As Long LastRowG = Cells(Rows.Count, "G").End(xlUp).Row Cells(tRow, "I").Resize(LastRowG, 1).Value = Cells(tRow, "G").Resize(LastRowG, 1).Value Range(Cells(tRow, "I"), Cells(LastRowG, "I")).RemoveDuplicates Columns:=1, Header:=xlNo LastRowI = Cells(Rows.Count, "I").End(xlUp).Row For k = tRow To LastRowG For i = tRow To LastRowI If Cells(k, "G").Value = Cells(i, "I").Value _ And Cells(k, "G").Value <> "" Then Cells(i, "j").Value = Cells(i, "j").Value + Cells(k, "H").Value Exit For End If Next i Next k Range(Cells(tRow, "I"), Cells(LastRowI, "J")).Sort _ Key1:=Cells(tRow, "J"), Order1:=xlDescending, _ Header:=xlNo End Function

nkmyr
質問者

お礼

いつもありがとうございます。 リレーのところが5位までなのですが、4位までとなっていますが。

nkmyr
質問者

補足

4大会にした場合、 LastRow = Cells(Rows.Count, "G").End(xlUp).Row For j = tCol To tCol + 3 としたのですが、正解でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel 団体によるランキングの付け方

    順位により下記のポイントを付けます。 1位4点 2位3点 3位2点 4位1点 各順位者の所属団体にポイントを付けます。 所属は都道府県です。 Gセルにポイントが多い順に団体名が並ぶようにしたいです。 上記の方法が思いつかないのです。 アドバイスをお願いします。

  • エクセル 表検索した合計の出し方について

    既出でしたらすいません。 いろいろ検索していみたのですが見つかりませんでしたので、教えて下さい。というかできないのですかね? エクセル2007を使っているのですが、商品、単価、入り値を一覧の表にしてVLOOKUPでその一覧の番号から表検索して別の一覧を作れるようにしました。その新しい表の最後の行に単価と入り値の合計を出したいと思っています。ただ、その最後の行は一定ではなくどこになるかわかりません。(違う場所に合計用のセルを作るのではなくすでに関数がある場所に付け足したいのですが。。。) 以下がそのセルに入っている関数の例です。 =IF(I6="","",ROUNDDOWN(I6*F6+I6*IF(G6<10,G6/10,IF(G6<100,G6/100,G6/1000)),0)) I6にVLOOKUPで検索した単価が入るように関数を入れてあります。 F6、G6は数量を入力するようにしてあります。単価と数量の合計 この関数に付け加えるか、もしくは新しい関数でもいいので 「もし、A6に合計の文字列が入れば、I1~I5(合計の文字列が入る前のセル)までを足す」 というようなことができますでしょうか?

  • エクセルでの特定範囲の順合計

    学校内のマラソン大会を開催するに当たり、チームごとに順位を得点化してチーム順位を出そうとしています。 走った生徒は、80人参加の場合は1位80点、2位79点・・・とつけていきます。体調不良やけがで走れない生徒の得点の付け方で、70人走り、5人が歩いた場合、この5人に10点→6点の合計(10+9+8+7+6=40)を均等割りして分配します。この処理を、「徒歩」と入力されている数を数え、自動で処理したいのですが、1つ減しながら加算していくことがどうしてもうまくできません。 手動で計算して、得点を出せばいいことなのですが、同時に複数の箇所で処理をするため、ミスが起こりそうなので自動化したいのです。 どなたか、いい方法がありましたら教えてください。 お願いします。

  • エクセルの合計が計算機と違う場合

    セルの値が小数点の付いた数字で単純に小数点以下を無くした場合、四捨五入されて小数点無しになりますがその用な感じでセルの数字をいくつか求め、更に合計した場合1の位の数字が1つずれる場合があります。表示された数字では無くて小数点以下の数字の合計が計算されてるようです、このような場合ですが求めたい値は単純にセル表示された数字の合計を求めたいだけで隠れた小数点以下の合計を求めたい訳ではありません。どうしたら良いか教えてください。 説明不十分ですが宜しくお願いします。

  • エクセルの合計値が一致しません

    A、B、C、D各シートの「J45」セル合計値を求めるべく、 合計 start A B C D end とシートを7つ並べて 合計のシートの「J45」セルに、 『=SUM(start:end!J45』と関数を入れています。 AのJ45セル値が14.53、Bは139.58、CとDはそれぞれ0なので合計が154.11となり、 合計シートのJ45セル値も145.11と表示されていますが、 ステータスバーには153.18と表示されているのです。 表示形式は「数値」の小数点以下2ケタを指定しています。 A~Dのシートには小数点2ケタの数字を直接数字を入力しており、 小数点以下3ケタより下が隠れている、なんてことはありません。 なぜセル内に表示されている数値と、ステータスバーに 表示されている数値にアンマッチが発生するのか、私には理解できません。 理由の分かる方、どなたか教えていただきますよう宜しくお願い致します。

  • accessで順位の合計の順位の求め方

    [T_成績]というテーブルの中に    フィールド名:[出席番号]    フィールド名:[得点] というフィールドがあるとします。 まず、新規にクエリーを作ります。これはただの選択クエリーで、[T_成績]テーブルを1個だけ追加します。 クエリーグリッドのフィールド欄に[出席番号]と[得点]を追加します。 最後のフィールドに順位を求める式を入力します。式は以下の通りです。   順位: (select count(*) from T_成績 as T_成績_1 where T_成績_1!得点>T_成績!得点)+1 こうすれば順位が求められるのですが例えば国語と数学と英語の順位の合計の低い順に順番を求めたいのですが(単純に合計の順位ならでるのですが)、順位の合計の順位というものがうまくいきません。本当に困っていますまる3日いろいろ試したのですがうまくいきません。今日も徹夜でした、よろしくお願いします。

  • 可変する範囲の合計を出したい(マクロ)

    下記のような表があります。 A … C   D …  G NO.  順位  社名  金額 1    1    A   800 2    2    B   700 3    3    C   600 4    3    D   600 5    4    E   500 :     :    :    : :     :    :    : 253  120   M   100 254  120   W   100 合計欄 (100位までの合計金額が入る) 254社まであり、1位から順に総金額を基準に順位がふってあります。 総金額が同じ会社は順位も同じになります。 なので、たとえば100位が10社ある場合もあります。 また、必ずしも100位までとは限りません。順位とNO.が連動している関係から、85位の次が112位という場合もあります。 このような表で、1位から100位以下の会社の合計金額をマクロで計算するにはどうすればよいのでしょうか? 順位は都度変わるので、合計する範囲も常に変わります。 ************************************************* Dim i As Integer For i = 7 To 254 Cells(i, "C").Select If Cells(i, "C") >= 101 then 'もし101以上だったら Cells(i, "C").Offset(1, 0).Select '一行下へ移動する※ ElseIf Cells(i, "C") <= 100 then 'もし100以下だったら End If Next End Sub ************************************************* ここまで書いて、次の作業に悩んでいます。 Elself~のあとに、 ActiveCell.Interior.ColorIndex = 3 ActiveCell.Offset(0, 4).Select ActiveCell.Interior.ColorIndex = 5 と入れると、C列とG列の100位以下の合計したい範囲に色がつきました。 これを利用して範囲指定すればいいのかな?と思いましたが、どうもうまくいきません。 都度変わる範囲を指定してSUM関数と組み合わせるにはどうすればよいのでしょうか?

  • エクセルVBAマクロで条件付き合計の方法

    Bに銀行名 a銀行 b銀行・・・ E F G H I Jにデータ末尾変動の数値(金額)が記入されており、 For i% = 1 To 6 adr2$ = Range("e7").Cells(1, i%).Address Range(adr2$).Cells(DatNum + 3, 1).Formula = "=SUMIF(B7:B1000,""a銀行"",E7:E1000)" と記入してa銀行の合計金額を記入しています。 しかし、上記記述ではEからセルが横に移動しても全てE7:E1000の合計となり意味がありません。 そこで、eのデータ末尾+3にE7~データ末尾      fのデータ末尾+3にF7~データ末尾 以下順番にforの条件が完了するまで としたいのですが、どのように書き換えればよろしいでしょうか。 逐一対応セルに標記するようにマクロを記述する方法もあるとはおもいますが、簡潔にできるのではないかと思い質問させて頂きました。

  • エクセルで大会順位表作成

    釣りの会で得点表をエクセルで作ろうと思っております。 釣果(匹数)で順位決定して、順位により 1位100点、2位90点 3位80点 4位70点 5位60点 6位50点 7位以降は参加点として10点それぞれ獲得します。 順位付けまではRANK関数でできたのですが、 順位による配点、また同率順位があった場合、 たとえば同率3位が3人いた場合、 3位4位5位の合計得点の210点の平均で70点を同率3位の3人に配点する、 いうよな処理をしたいのですが、 よろしくお願いいたします。

  • エクセル 同順位の処理

    いつもお世話になっております。  上位3名の合計点を求める時に、同順位(例:1位1名・2位1名・3位2名)が出た場合、3位者(同順位者)については1名のみの点数を計算したいのですがその方法がわかりません。よろしくお願いします。  また、2位が2名の時は、1位と2位の3名の合計点の計算となります。  順位はRANK関数を使用しています。 得点 順位 上位合計点 98  1 80  3 76        ? 82  2 80  3 よろしくお願いします。