• ベストアンサー

今日からトライしている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を勉強しようと思います。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

こんばんは。 >関数も使えなく、この機会に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

squawk77
質問者

お礼

大変ご丁寧なご回答ありがとうございました。 vlookupを忘れていました…。

その他の回答 (2)

noname#187541
noname#187541
回答No.3

こんばんは。 関数では出来ないので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のエラーになります。

squawk77
質問者

お礼

ご回答ありがとうございました。 vlookupでも出来ますね。でもこれを機会にvbaにトライしてみたいと思います。

回答No.1

頑張って勉強してくださいね!! 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点未満にしてあります。

squawk77
質問者

お礼

ご回答ありがとうございました。 これを機会にvbaにトライしてみたいと思います。

関連するQ&A

専門家に質問してみよう