• ベストアンサー

VBAで関数を作る

A列に0~100まで変化する数字が入っています。 それを参照に、B列にA列の数字が80~100までだったら 5と表示、60~80までだったら4と表示・・・という 関数を作りたいのです。 public function if then elself など使えばできそうな気がしますが教則本の通りにやってもエラーがでてしまうのです。 どなたか助けてください。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

セルに =INT(A1/20)+1 と書いて、調整すれば答えはでるかと思いますが? >教則本の通りにやってもエラーがでてしまうのです。 具体的な式を記入して貰わないとアドバイスは出来ませんよ。

hayashi23
質問者

お礼

一番役に立ちました!ありがとうございます!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問者の回答予想イメージからかけ離れているかと思いますが (それだけ世界が広がるということでもあります) Sub test01() For i = 1 To 100 Cells(i, "B") = WorksheetFunction.VLookup(Cells(i, "A"), Range("e1:f4"), 2, True) Next i End Sub テストでA列に100から1までの連続番号を入れます。 どこでもいいのですがE1:F4に 基準表を 0 3 60 4 80 5 100 を作っておきます。 実行するとB列に評価が出ます。 80をどちらに入れるのか、質問では不明確です。 それにより、61,81にしなければならないかも知れません。基準表はよく考えてください。 こういう回答になったのも、この問題はVBAでなくVLOOKUP関数で処理すべき問題だと思いまして、そこからの発想です。 また別の考えで処理するとして 表引きをIF THEN やCASEで処理する気に私ははなりません。 ワークシート関数VLOOKUPを使いたくなければ コードの中でテーブルをつくり、表引きします。 Sub test02() Dim t(5) s = Array(80, 5, 60, 4, 40, 3, 0, 2) For i = 1 To 100 n = Cells(i, "A") For j = 0 To 7 Step 2 If n >= s(j) Then Cells(i, "B") = s(j + 1) Exit For End If Next j Next i End Sub

  • ta123
  • ベストアンサー率51% (95/186)
回答No.1

以下のようになると思います。 Function Sample(myRange As Range) As Integer If myRange >= 80 And myRange <= 100 Then Sample = 5 ElseIf myRange >= 60 Then Sample = 4 Else: Sample = 0 End If End Function

hayashi23
質問者

お礼

ありがとうございました! 早速実行して成功しました。 本当にありがとうございました。

関連するQ&A