|
▼ToShiYo さん:
>実はFor〜NextのNestについてのレベルの質問をしたつもりでした。
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=42601;id=excel
>の回答に今気がついたのですが、このような内容の質問をしたつもりでした。
以下のようなコードで作成しました。
>
>Sub 割引率2()
>Dim a As String
>For I = 2 To 3
> For n = 2 To 4
> I = InputBox("一般は2を" & Chr(10) & _
> "会員は3を入力してください")
> n = InputBox("50000円以上は2" & Chr(10) & _
> "20000円以上は3" & Chr(10) & _
> "10000円以上は4を入力してください")
> If Selection.Column = 2 Then
> a = Cells(1, 2).Value
> Else
> a = Cells(1, 3).Value
> End If
> MsgBox a & "は" & Selection.Value * 100 & "%割引です"
> Next n
>Next I
>End Sub
>
>せっかく頂戴しましたコードですが入力した結果が0%になってしまいます。
>修正がいただけるようであれば幸いです。
0%になるのは何処も選択されていないからです。
あなたの一番最初のコードでは Cells(n,i).Select でセルを選択していましたが、
このコードではいきなり
If Selection.Column=2 Then
としています。
それから、For〜Nextの質問とは外れますが、InputBoxの値を変数に使用するのなら、ループする必要が無いのでは?
またInputBoxの戻り値が数値でなかったら Cells(n,i)とするとエラーになります。
入力値にほかの数字が入った時のエラー対策も必要かもしれません。
Sub 割引率2()
Dim a As String
入力1:
i = Val(InputBox("一般は2を" & Chr(10) & _
"会員は3を入力してください"))
If i <> False Then
If i = 2 Or i = 3 Then
入力2:
n = Val(InputBox("50000円以上は2" & Chr(10) & _
"20000円以上は3" & Chr(10) & _
"10000円以上は4を入力してください"))
If n <> False Then
If n > 1 And n <= 4 Then
MsgBox Cells(1, i) & "は" & Cells(n, i) * 100 & "%割引です"
Else: GoTo 入力2
End If
End If
Else: GoTo 入力1
End If
End If
End Sub
InputBoxの引数のTypeが指定してないのでVal関数で数値にしてセルの列番号と行番号に使います。
条件分岐が多くなりましたが、ほかの数字が入った時は再入力させます。
|
|