プロが教える店舗&オフィスのセキュリティ対策術

お世話になってます。
ExcelVBAのSelect Caseについての質問です。
例えば、
Select Case 得点
Case Is>=80
評価="優"
Case Is>=70
評価="良"



とあります。
ここで、条件の80以上というのを決まった値ではなくセルの値としてできないのでしょうか?例えばDの列の値を条件として設定できないのでしょうか?
また、評価="優"というのも、決まった値ではなくEの列といったようにできないのでしょうか?
教えて下さい。

A 回答 (10件)

こんにちは。

maruru01です。

こんな感じで出来ます。


Select Case 得点
  Case Is >= Range("D1").Value
    評価 = Range("E1").Value
  Case Is >= Range("D2").Value
    評価 = Range("E2").Value
・・・
End Select
    • good
    • 0
この回答へのお礼

早々の解答ありがとうございます。
質問の仕方が悪かったと思います。
上のケースですと、Range("D1").Value で、D1と設定されてしまいますよね。
そうではなくて条件がDの列に並んでいるんです。
つまり、条件が変数なのですが。

お礼日時:2003/09/26 15:43

#8,#9です。



もうひとつ。もしかしたら、D列にテストの点数があって、E列に評価をだす。これを1行毎にやる、ということでしょうか。
もしそうなら、こんなかんじでしょうか。


Sub test()

For p = 0 To 56635
  With Range("E1").Offset(p)
    Select Case Range("D1").Offset(p)
      Case Is = ""
        Exit Sub
      Case Is >= 90
        .Value = "優"
      Case Is >= 80
        .Value = "良"
      Case Is >= "70"
        .Value = "可"
      Case Else
        .Value = "不可"
    End Select
  End With
Next p

End Sub
    • good
    • 0
この回答へのお礼

解決いたしました。
おかしな質問で申し訳ありませんでした。

お礼日時:2003/09/29 12:46

#8です。



>自身

自信でした。(~_~;)
    • good
    • 0

横から失礼します。



ひょっとして、こういうことでしょうか?
下の例ではD1、E1を起点に、それぞれ一つずつ下のセルを参照していきます。

Set Score = Range("D1")
Set Result = Range("E1")

Select Case 得点
  Case Is >= Score.Value
    評価 = Result.Value
  Case Is >= Score.Offset(1, 0).Value
    評価 = Result.Offset(1, 0).Value
  Case Is >= Score.Offset(2, 0).Value
    評価 = Result.Offset(2, 0).Value
End Select

もし、D1を100、D2を99・・・D100を1とした場合、100点満点の成績を10点刻みで評価するなら、

Set Score = Range("D10")

Case Is >= Score.Value
Case Is >= Score.Offset(10, 0).Value
Case Is >= Score.Offset(20, 0).Value

5点刻みなら、

Set Score = Range("D5")

Case Is >= Score.Value
Case Is >= Score.Offset(5, 0).Value
Case Is >= Score.Offset(10, 0).Value

となります。

こう書いていると、マクロを実行中にしきい値を変えたくなってきますが、Offset()の中の数字はSelect Caseの中に入ってしまうと変えようが無いので、それぞれ変数にしてSelect Caseの前で数を割り当てるとか、Select Caseの中は固定しておいてD列の数字を変えてしまう方法が考えられます。

ご質問の文や#6での返信を素直に読むと、誰が見ても#2さんの回答になると思います。もう少し表現を工夫されたほうがいいのでは。(^_^;)
いろいろ書きましたが、わたしもご質問の意図を読み取っているかどうか自身がありません。(^^ゞ
    • good
    • 0

A1セルに例えば「55」


B1:B3に(区分け表)
80
60
40
と入れて、下記を実行すると
60-40と出ます。
A1の値を変えて実行すると、MSGBOX表示が
それなりに出ます。
こう言うことを出来れば良いのでしょうか。
Sub test01()
Select Case Range("a1")
Case Is >= Range("b1")
MsgBox Range("b1") & "以上"
Case Is >= Range("b2")
MsgBox Range("b1") & "-" & Range("b2")
Case Is >= Range("b3")
MsgBox Range("b2") & "-" & Range("b3")
Case Else
MsgBox Range("b3") & "以下"
End Select
End Sub
    • good
    • 0
この回答へのお礼

解決いたしました。
ありがとうございました。

お礼日時:2003/09/29 12:45

>次の行に行った場合に、Range("D1").Value のD1はD1では無くて、D2なのです。


どこを変化させたいのかよくわかりません。

Case Is >= Range("D1").Value
Case Is >= Range("D2").Value
Case Is >= Range("D3").Value
・・・

ということではないのでしょうか?
それとも、bin-chanさんのを拝借すると、


n行 = n行 + 1
得点 = Range("C" & n行).Value

Select Case 得点
  Case Is >= Range("D" & n行).Value
    評価 = Range("E" & n行).Value
  Case Is >= 70
    評価 = Range("E" & n行).Value
  Case Is >= 60
    評価 = Range("E" & n行).Value
・・・
End Select


という感じで先頭のCaseだけを可変にしたいのでしょうか?
その場合、評価はどこから持ってくるのでしょうか?

もっと具体的にセル位置を提示して下さい。

bin-chanさんへ
それだと、Case句が全部同じ条件になってしまいますね。
やはり、もっと具体的な条件を提示してもらわないと、これ以上は無理ですね。
    • good
    • 0
この回答へのお礼

Case Is >= Range("D1").Value
Case Is >= Range("D2").Value
Case Is >= Range("D3").Value
・・・
こういうことです。
また、これにともなって、返す値も、
評価 = Range(E1).Value
評価 = Range(E2).Value
評価 = Range(E3).Value
・・・

のように変化します。

お礼日時:2003/09/26 18:27

横から失礼します。



cacheさんは「行単位」で処理なさりたいのですね?

n行 = n行 + 1
得点 = Range("C" & n行).Value
のような記述が事前にある、ということでは?

そうであるなら、maruruさんのNo.2を

n行 = n行 + 1
得点 = Range("C" & n行).Value

Select Case 得点
  Case Is >= Range("D" & n行).Value
    評価 = Range("E" & n行).Value
  Case Is >= Range("D" & n行).Value
    評価 = Range("E" & n行).Value
・・・
End Select

とすれば良いと思います。
    • good
    • 0

>しきい値です。


なら、私のNo.2の回答でいいと思いますが。
試してみましたか?
    • good
    • 0
この回答へのお礼

Case Is >= Range("D1").Value のD1というのは一つの値ですよね。次の行に行った場合に、Range("D1").Value のD1はD1では無くて、D2なのです。

お礼日時:2003/09/26 17:36

>そうではなくて条件がDの列に並んでいるんです。


>つまり、条件が変数なのですが。
実際にD列にはどのような値が入っているのでしょうか?
「80」とかのしきい値ではないんですか?
    • good
    • 0
この回答へのお礼

しきい値です。

お礼日時:2003/09/26 16:00

こんにちは



あらかじめ変数として代入したいセルを定義しておき、Caseで使用すれば可能です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
”あらかじめ変数として代入したいセルを定義しておき”とはどのようにするのでしょうか?

お礼日時:2003/09/26 15:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!