• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストボックスを使ったときの条件分岐について)

テキストボックスを使ったときの条件分岐について

このQ&Aのポイント
  • ユーザーフォームを使って人事管理をしたいと思っています。通勤距離を入力すると、通勤手当額が表示されるようにしたいですがうまくいきません。
  • 距離と手当額の関係はエクセルのシートに入力されており、ユーザーフォームのテキストボックスを使って実現したいです。
  • 距離に応じた手当額の条件分岐を行い、テキストボックスに入力した距離に対応する手当額が表示されるようにしたいです。

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

  • ベストアンサー
  • Masa2072
  • ベストアンサー率51% (94/182)
回答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を返えします。

kou557
質問者

お礼

ありがとうございます。 なるほど、考え方ですね。引くというところに頭が回りませんでした。あと少しでなんとか完成しそうですので、さっそく組み込んで使わせてもらいます。 これで、データ管理がだいぶ楽になります。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答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

kou557
質問者

お礼

No1の方のものと合わせて、活用させていただきます。テキストのデータを数値に変換する必要があるのですね。 ほかにもやりたいことがあるので、そちらでも参考にさせていただきます。ありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答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に引き出す。 見たいな事がわかりやすいと思います。

kou557
質問者

お礼

ありがとうございました。自分だけが使う分にはセルに関数を入れてもよいかと思ったのですが、複数にんが使うものなので、シートに関数を埋め込むと、ちょっと怖いのです。何も考えずに上書きされる可能性があるものですから・・・。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答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

kou557
質問者

お礼

データ用のシートには、ほかにもたくさんのデータがあるので、A1を0にできないのです。でも、他の野茂に活用させえていただきます。ありがとうございます。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答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 こんな感じで・・

kou557
質問者

お礼

私の質問の書き方が悪かったです。距離については、0~2キロは0円、2.1~4.9キロは2000円、5.0~9.9キロまでは4100円という風になるのです。申し訳ありませんでした。

kou557
質問者

補足

VLookup,でなんとか表示はできるようになりました。ありがとうございます。  そこで、さらになんですが、動かしてみたところ、たとえば、4.6と入れると5キロ以上の金額が表示されるようになってしました。ほかの距離も同じで、たとえば10.7と入力すると15キロ以上の金額になってしまうのです。この場合は、シートの書き方なのか、それともコードの書き方で解決できるものでしょうか。

関連するQ&A

専門家に質問してみよう