アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAはまだやり始めたばかりで、ちょっとわからないので、教えて
下さい。
TextBox1~19に金額を入力すると、
TextBox60に小計
TextBox61に消費税
TextBox62に合計
が入るように設定してあります。
TextBox61のよこに
OptionButton1 切捨て
OptionButton2 切り上げ
OptionButton3 四捨五入
OptionButton4 税込み(「-」を入力)
を設定し、オプションボタンを選択するごとに、TextBox61の
消費税設定を変えたいと思っています。
標準では下記のコードでOptionButton1が選択されるように
してあります。
オプションボタンで切り替えるにはどのようにしたら
よいでしょうか。。。
Private Sub 合計Sub(ByVal myTextBox As MSForms.TextBox)
Const cnsTax As Double = 0.05
Dim i As Long
Dim v(1 To 19) As Long
Dim y(60 To 62) As Long
'
With myTextBox
.Value = Format$(.Value, "#,##0")
End With
'再計算
On Error Resume Next
For i = 1 To 19
v(i) = CLng(Me.Controls("TextBox" & i).Value)
Next
With Application.WorksheetFunction
y(60) = .Sum(v)
If myTextBox Is Me.TextBox61 Then
y(61) = CLng(myTextBox.Value)
Else
y(61) = .RoundDown(y(60) * cnsTax, 0)
End If
y(62) = .Sum(y(60), y(61))
End With
On Error GoTo 0
For i = 60 To 62
Me.Controls("TextBox" & i).Value = Format$(y(i), "#,##0")
Next
End Sub

A 回答 (2件)

質問のような場合の合計計算などは、ふうつOptionbuttonのClickではなくて、


入力確認後、CommandButtonをClickすることで計算させるのではないでしょうか。

で、その方法。
計算用にCommandButtonをひとつ配置しておきそのClickで計算。

'------------------------------------------------
Private Sub CommandButton1_Click()
  Const cnsTax As Double = 0.05
  Dim Kei As Long
  Dim Zei As Long
  Dim i As Integer

 For i = 1 To 19
  If IsNumeric(Me.Controls("TextBox" & i).Value) Then
    Kei = Kei + CLng(Me.Controls("TextBox" & i).Value)
  End If
 Next i

 Select Case True
   Case OptionButton1.Value
     Zei = WorksheetFunction.RoundDown(Kei * cnsTax, 0)
   Case OptionButton2.Value
     Zei = WorksheetFunction.RoundUp(Kei * cnsTax, 0)
   Case OptionButton3.Value
     Zei = WorksheetFunction.Round(Kei * cnsTax, 0)
   Case OptionButton4.Value
     Zei = 0
 End Select

  TextBox60 = Kei
  TextBox61 = Zei
  TextBox62 = Kei + Zei

End Sub
'------------------------------------------------

上記では、OptionButton4、または、
どのOptionButtonもチェックされてないときは、
Zeiは0になりますので
実際には、
 Case OptionButton4.Value
   Zei = 0
この部分は省略してもかまいません。
以上です。
    • good
    • 0
この回答へのお礼

myRangeさんありがとうございます。
フォーム上で、オプションボタンをクリックして、
簡単に、変わればいいかなぁと思っていたのですが、
myRangeさんの言うとおり、コマンドボタンでやるという方法も
有ですね。
その方法でやってみたいと思います

お礼日時:2009/10/03 10:47

Select Case True


Case OptionButton1.Value
' 切捨て

Case OptionButton2.Value
' 切り上げ

Case OptionButton3.Value
' 四捨五入

Case OptionButton4.Value
' 税込み

End Select

オプションボタンの状態による分岐です。

> オプションボタンを選択するごとに

効率無視であれば OptionButtonのClickイベントプロシージャで合計Subを呼び出せばよいかと。

この回答への補足

Wizard_Zeroさんありがとうございます。
一応切り捨ての時の消費税計算のコードを作って、
Clickイベントでやってはいたのですが、
「引数は省略できません」というエラーがでてしまうのです。
私のコードが間違っているとおもうのですが、どのように変えたらいいかわかりません。
______________________________
Private Sub 切り上げSub(ByVal myTextBox As MSForms.TextBox)
Const cnsTax As Double = 0.05
Dim i As Long
Dim v(1 To 19) As Long
Dim y(60 To 62) As Long
'
With myTextBox
.Value = Format$(.Value, "#,##0")
End With
'再計算
On Error Resume Next
For i = 1 To 19
v(i) = CLng(Me.Controls("TextBox" & i).Value)
Next
With Application.WorksheetFunction
y(60) = .Sum(v)
If myTextBox Is Me.TextBox61 Then
y(61) = CLng(myTextBox.Value)
Else
y(61) = .RoundUp(y(60) * cnsTax, 0)
End If
y(62) = .Sum(y(60), y(61))
End With
On Error GoTo 0
For i = 60 To 62
Me.Controls("TextBox" & i).Value = Format$(y(i), "#,##0")
Next
End Sub
________________________________
Private Sub OptionButton2_Click()
Call 切り上げSub
End Sub

教えて頂いた、Serect Caseのやり方ですが、
合計Subの消費税計算しているところで、入力すればいいのですか??
せっかく教えて頂いたのですが、使い方がわかりません。。。
合計Subの一部に組み込んでみたのですが、オプションボタンでの
切り替えができませんでした。
きっと、コードの入れ方が間違ってますよね?
With Application.WorksheetFunction
y(60) = .Sum(v)
If myTextBox Is Me.TextBox61 Then
y(61) = CLng(myTextBox.Value)
Else
Select Case True
Case OptionButton1.Value ' 切捨て
y(61) = .RoundDown(y(60) * cnsTax, 0)
Case OptionButton2.Value '切り上げ
y(61) = .RoundUp(y(60) * cnsTax, 0)
       Case OptionButton3.Value '四捨五入
y(61) = .Round(y(60) * cnsTax, 0)
End Select
End If
y(62) = .Sum(y(60), y(61))
End With

補足日時:2009/10/01 09:07
    • good
    • 0

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