- ベストアンサー
今日からトライしているexcel vbaの初心者です。
今日からトライしているexcel vbaの初心者です。 a1~a100のセルに点数が入力されているとします。 その点数を元に下記の通りランクを自動的に付ける場合の vbaのコーディングはどうなりますか? ss(95以上) a(90-94) b(85-89) c(80-84) d(75-79) e(70-74) f(65-69) g(60-64) h(55-59) i(50-54) j(50以下) 関数も使えなく、この機会にVBAを勉強しようと思います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >関数も使えなく、この機会にVBAを勉強しようと思います。 VLOOKUP関数を使えば簡単にできますよ。典型的な問題です。 対応表がD1:E11の範囲にあるとして B1に =VLOOKUP(A1,$D$1:$E$11,2) として、以下コピペしてください。 VBAの勉強ということでしたら以下に一例を示します。 Sub test() Dim i As Integer For i = 1 To 100 Select Case Cells(i, "A").Value Case Is >= 95 Cells(i, "B").Value = "ss" Case Is >= 90 Cells(i, "B").Value = "a" Case Is >= 85 Cells(i, "B").Value = "b" Case Is >= 80 Cells(i, "B").Value = "c" Case Is >= 75 Cells(i, "B").Value = "d" Case Is >= 70 Cells(i, "B").Value = "e" Case Is >= 65 Cells(i, "B").Value = "f" Case Is >= 60 Cells(i, "B").Value = "g" Case Is >= 55 Cells(i, "B").Value = "h" Case Is >= 50 Cells(i, "B").Value = "i" Case Else Cells(i, "B").Value = "j" End Select Next i End Sub
その他の回答 (2)
こんばんは。 関数では出来ないのでVBAで、ということのようですが、それはそれでVBAを覚えるきっかけになるでしょうからいいかと思います。 ですが、関数で全く出来ないわけではありません。 VBAでやりたいようですから参考程度にお読みください。 A1に点数を入力、B1にランクを表示 とします。まず、点数とランクの表以下のように作成します。 表の範囲はどこでもかまいません。仮にA4~B13とします。 0 j 50 i 55 h 60 g 65 f 70 e 75 d 80 c 85 b 90 a 95 ss B1に =VLOOKUP($A$1,$A$3:$B$13,2,TRUE) と入力します。 ちなみに、点数は0~としているので、マイナスの場合は#N/Aのエラーになります。
お礼
ご回答ありがとうございました。 vlookupでも出来ますね。でもこれを機会にvbaにトライしてみたいと思います。
- earthkun14
- ベストアンサー率33% (1/3)
頑張って勉強してくださいね!! Sub ランク付け() Dim RN As Range Dim RNKStr(0 To 10) As String Dim i As Single RNKStr(10) = "ss" For i = 9 To 0 Step -1 RNKStr(i) = Chr(96 + 10 - i) Next Set RN = ActiveSheet.Cells(1, 1) Do Until RN.Value = "" Select Case RN.Value Case Is < 50 RN.Offset(, 1).Value = RNKStr(0) Case Is > 95 RN.Offset(, 1).Value = RNKStr(10) Case Else RN.Offset(, 1).Value = RNKStr(Int((RN.Value - 50) / 5) + 1) End Select Set RN = RN.Offset(1) Loop End Sub ちなみに、50-54は50点以上54点以下だとすると、50点の条件分岐が重複してしまいます。 上のコードはjは50点未満にしてあります。
お礼
ご回答ありがとうございました。 これを機会にvbaにトライしてみたいと思います。
お礼
大変ご丁寧なご回答ありがとうございました。 vlookupを忘れていました…。