テキストボックスを使ったときの条件分岐について
ユーザーフォームを使って人事管理をしたいと思っています。 そこで、通勤距離を入力すると、通勤手当額が表示されるようにしたいのですがうまくいきません。手当額は変更があるために、エクセルのシートに入力します。
シートのA1からA5まで2,5、10、15、・・・という風に距離数が入ります。
B1からB5まで2,000、4,000、4,500、5,000、・・・と金額が入ります。
ユーザーフォームにテキストボックスを二つ置き、ボックス1に距離を入力するとボックス2に金額が表示という風にしたいのです。
2キロ未満は0、2キロ以上は2,000、5キロ以上は4,000、10キロ以上は4,500、15キロ以上は5,000という風に表示できるでしょうか?
本を片手にやっているのですが、何分力不足で八方ふさがりになってしまいまいた。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
回答No.1のものです。
前回サンプルを以下のように変更してみてください。
Private Sub TextBox1_Change()
If IsNumeric(Me.TextBox1) Then
If Me.TextBox1 <= 2 Then
Me.TextBox2 = 0
Else
Me.TextBox2 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1) - 0.1, Sheet1.Range("A1:B4"), 2)
End If
Else
Me.TextBox2 = "No Numeric!"
End If
End Sub
通勤距離申請が1.1kmのように100m単位であれば申告値から0.1を差し引きます。
例えば5kmなら4.9kmとなり4000が返えり、5.1kmなら5.0kmとなり4500を返します
また、以前のままですと2km以下の場合はエラーになりますので、If文にて2km以下のとき0を返えします。
ありがとうございます。 なるほど、考え方ですね。引くというところに頭が回りませんでした。あと少しでなんとか完成しそうですので、さっそく組み込んで使わせてもらいます。 これで、データ管理がだいぶ楽になります。
No.4
- 回答日時:
回答No2です。
A1セルに0を入れることができないのでしたらマクロのコードは次のようにすればよいでしょう。
Private Sub TextBox1_AfterUpdate()
Set WS1 = Worksheets("Sheet1") 'シート1に距離と金額の関係がある場合です。
If TextBox1.Text = "" Then Exit Sub
If TextBox1.Text <> "" Then
n = TextBox1.Text * 1 ’テキストのデータは文字列です。数値への変換が必要です。
If n<2 Then
TextBox2.Value=0
Else
TextBox2.Value = WorksheetFunction.VLookup(n, Range(WS1.Cells(1, 1), WS1.Cells(5, 2)), 2, True)
End If
End If
End Sub
No1の方のものと合わせて、活用させていただきます。テキストのデータを数値に変換する必要があるのですね。 ほかにもやりたいことがあるので、そちらでも参考にさせていただきます。ありがとうございました。
No.3
- 回答日時:
別案ですが
シートに距離と金額の対応表を準備します。
仮に
A B
1
2 距離 金額
3 0 2000
4 2.1 4000
5 5.1 4500
・・・と準備して
A1に距離を入れると、B1に金額が表示されるように関数を準備します。
B1には =VLOOKUP(A1,A3:B100) で大丈夫かと思います。
ユーザーフォームのVBAは
Private Sub TextBox1_Change()
Range("A1").Value=TextBox1.Value
TextBox2.Value=Range("B1").Value
End Sub
として、TextBox1の値をA1にいれて、B1の式の結果をTextBox2に引き出す。
見たいな事がわかりやすいと思います。
ありがとうございました。自分だけが使う分にはセルに関数を入れてもよいかと思ったのですが、複数にんが使うものなので、シートに関数を埋め込むと、ちょっと怖いのです。何も考えずに上書きされる可能性があるものですから・・・。
No.2
- 回答日時:
エクセルのシートで距離と通勤手当の額の表示については、A1セルを0に、A2セルを2に、・・・・・、また、B1セルには0を、B2セルには2000、・・・のようにA1セルが0にした表であることが必要です。
その後にユーザーフォームのコードについては次のようにします。Private Sub TextBox1_AfterUpdate()
Set WS1 = Worksheets("Sheet1") 'シート1に距離と金額の関係がある場合です。
If TextBox1.Text = "" Then Exit Sub
If TextBox1.Text <> "" Then
n = TextBox1.Text * 1 ’テキストのデータは文字列です。数値への変換が必要です。
TextBox2.Value = WorksheetFunction.VLookup(n, Range(WS1.Cells(1, 1), WS1.Cells(5, 2)), 2, True)
End If
End Sub
データ用のシートには、ほかにもたくさんのデータがあるので、A1を0にできないのです。でも、他の野茂に活用させえていただきます。ありがとうございます。
No.1
- 回答日時:
難しく考えずにVLOOKUP関数を使うとよいのではないでしょうか?
たとえば
Private Sub TextBox1_Change()
If IsNumeric(Me.TextBox1) Then
Me.TextBox2 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheet1.Range("A1:B4"), 2)
Else
Me.TextBox2 = "No Numeric!"
End If
End Sub
こんな感じで・・
この回答への補足
VLookup,でなんとか表示はできるようになりました。ありがとうございます。
そこで、さらになんですが、動かしてみたところ、たとえば、4.6と入れると5キロ以上の金額が表示されるようになってしました。ほかの距離も同じで、たとえば10.7と入力すると15キロ以上の金額になってしまうのです。この場合は、シートの書き方なのか、それともコードの書き方で解決できるものでしょうか。
私の質問の書き方が悪かったです。距離については、0~2キロは0円、2.1~4.9キロは2000円、5.0~9.9キロまでは4100円という風になるのです。申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) 下記エクセルの式がなぜこうなるのか理由が知りたいです。 6 2022/08/20 00:43
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) excel vba でユーザーフォーム入力ができない 2 2022/12/12 14:42
- Excel(エクセル) エクセルで割り振りをする方法 7 2022/08/02 14:02
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付が未入力の際はゼロか、空...
-
Excelの「0」だけ非表示、小数...
-
エクセルで1月0日と表示される!!
-
Rangeメソッドは失敗しました。...
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
エクセルで複写のように自動入...
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
シート参照で変数を使いたい(EX...
-
EXCELマクロで、シート間でのコ...
-
エクセルで、加筆修正したセル...
-
Excelで複数シートの選択セルを...
-
Excelにて、カタカナだけのセル...
-
エクセルで別シートからの最大...
-
Aというブックの1というシート...
-
エクセルの文字
-
エクセルのセルに、マウスで選...
-
エクセルでセルが指定できない
-
Excelシートの保護時にデータの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報