![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
補足拝見しましたが、VBAでやる必要性が感じられません。
関数で十分ではないでしょうか。
添付の図の例では、E2に賞品数を入れ、C2には↓の式を入れ下にコピーしています。
=IFERROR(IF($E$2>=RANK(B2,B:B),RANK(B2,B:B),""),"")
これで如何でしょう。
![「Excel VBAでランク上位から配分す」の回答画像5](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/9/1241782_5497ecf5417d1/M.jpg)
No.4
- 回答日時:
こんばんは!
VBAでの一例です。
↓の画像のような配置になっていて、「賞品数」はF2セルに入力済みとします。
C列順位(同順位なし)は操作しなくても良いようにコードに組み込みました。
(同順位の場合は上側が上位としています)
A・B列にデータがあるとします。
↓のコードをコピー&ペーストしてマクロを実行してみてください。
Sub Sample1()
Dim i As Long, k As Long, cnt As Long, lastRow As Long
Dim c As Range, myAry
myAry = Array(1, 2, 3, 4, 5)
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 1 Then
Range(Cells(2, "C"), Cells(lastRow, "D")).ClearContents
End If
Range(Cells(2, "C"), Cells(lastRow, "C")).Formula = "=COUNTIF(B:B,"">""&B2)+COUNTIF(B$2:B2,B2)"
0: For k = 0 To UBound(myAry)
Set c = Range("C:C").Find(what:=myAry(k), LookIn:=xlValues, lookat:=xlWhole)
c.Offset(, 1) = c.Offset(, 1) + 1
cnt = cnt + 1
If cnt >= Range("F2") Then Exit For
Next k
If cnt < Range("F2") Then
GoTo 0
End If
End Sub
※ データ変更があるたびにマクロを実行してください。m(_ _)m
![「Excel VBAでランク上位から配分す」の回答画像4](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/667667_5497e2c1d8bd5/M.jpg)
No.3
- 回答日時:
VBAでなくてもRANK関数で順位を決めて、たとえば順位の入ったセルがB列で商品の数の入ったセルがE1だとして、C列に結果を表示するとした場合、C1に以下の式を入れて下にコピーすると商品数分の順位までの人に配分と表示されます。
=IF(AND(B1<>"",B1<=5,B1<=$E$1),"配分","")
RANK関数は使うとして
VBAだと以下のような感じでも
Sub Example()
Dim c As Range
Dim ItemsCount As Integer
If Range("E1").Value > 5 Then
ItemsCount = 5
Else
ItemsCount = Range("E1").Value
End If
Range("C:C").ClearContents
For Each c In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
If c.Value <> "" And c.Value <= Range("E1").Value And c.Value <= 5 Then
Range("C" & c.Row) = "配分"
ItemsCount = ItemsCount - 1
If ItemsCount = 0 Then
Exit For
End If
End If
Next
End Sub
No.2
- 回答日時:
A1からA5セルに順位が記入してある
D1セルに賞品個数が記入してある
sub macro1()
range("B1:B5").formula = "=IF(A1<=SMALL(A:A,D$1),""○"","""")"
end sub
No.1
- 回答日時:
補足願います。
同点等で同じ順位の人が複数いた場合はどうするのでしょう?
例:賞品3つ、1位:1名、2位:1名、3位;2名
この回答への補足
mt2008様、
ご回答ありがとうございます!
同点は発生しない前提で考えています。
質問では成績順と記載しましたが、
イメージとしては、同点が発生しないように乱数を発生させ、順位付けする。
そしてランキング上位から賞品を分配する。
分配する際のイメージは、a) 賞品5つ以下、1位~5位まで各1名、b)もしくは商品5つ以上、1位~5位まで各1名です。
賞品数分ループ分を回すようにして、賞品がある回数分処理を回して分配したいです。
つたない説明で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- その他(Microsoft Office) EXCEL VLOOKUPに関する質問 5 2023/02/08 11:38
- Excel(エクセル) エクセル count関数で出てきた数だけの行数をリンクで参照する 3 2022/08/10 12:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Excel(エクセル) RANK.EQとCOUNTIFSの組み合わせで同ポイントの場合、違う条件を加えて順位を付けたい。 1 2022/08/30 19:49
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- 債券・証券 高度な質問だと思いますが、知性あふれる方にお願いします。教えてください。 現在メットライフア◯コで積 7 2023/08/06 10:12
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで表
-
【マクロ】for next構文について
-
職場の人から聞かれており、こ...
-
ユーザー定義関数をアドイン登...
-
PDFの請求明細をエクセルにしたい
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
エクセルの関数について教えて...
-
エクセルで不等号記号(≠)が上に...
-
スプレッドシート、Excelでの数...
-
スプレッドシートで使う数式を...
-
Excelで50個のセルに同じ文字を...
-
[オートフィルタ]で抽出された...
-
エクセルの問題です。絶対値の...
-
エクセル関数を教えてください
-
各ページの1番上の表示について
-
Microsoft Officeの中古は信用...
-
pdfの表をexcelにはりつけて計...
-
Excelのif関数で文字が見えなく...
-
Excel 2019 は、SPILL機能があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報