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

Excelマクロでuserfoam内のtextboxに数字を入力する際、
整数なら3桁ごとカンマで区切る表示 (1,234)
少数なら小数点以下を表示 (1.23)
になるように

TextBox1.Value = Format(TextBox1.Value, "#,###" &
IIf(InStr(TextBox1.Text, ".") = 0, "", ".##"))

としていたのですが、
1.02 のように小数点の後に0が続く場合、0が表示されず 1.2 となってしまいました。
そこで

TextBox1.Value = Format(TextBox1.Value, "#,###" &
IIf(InStr(TextBox1.Text, ".") = 0, "", ".00"))

と最後の##を00に変更したのですが、
textboxに小数点を入力した時点で 1.00 と表示されてしまい小数点以下の部分に数字を入力できません。

小数を入力する際、小数点以下に0と続く場合でも正しく入力できるようなマクロを教えていただけますでしょうか。
よろしくお願いいたします。

質問者からの補足コメント

  • Private Sub TextBox1_Change()
    TextBox1.Value = Format(TextBox1.Value, "#,###" & _
    IIf(InStr(TextBox1.Text, ".0") <> 0, ".0#", IIf(InStr(TextBox1.Text, ".") = 0, "", ".##")))
    End Sub

    使用する値が小数点第2位までなので、上記のようにすることで
    とりあえずは解決しましたが、
    使用する値の小数点以下の位が増えたときに対応できません。

    根本的な解決方法があれば教えていただきたいです。

      補足日時:2022/04/11 16:19

A 回答 (3件)

No1です。



UserFormだとFormat関数の挙動が若干違うようですね。
大変失礼いたしました。

単純にはうまくいかないようなので、プリミティブな方法で処理してみました。
数値以外が入力された場合、小数点以上と以下の部分に分けて数値に矯正します。
少数以下の表示は、入力したままの桁数になります。
例えば
 1234.56.78 → 1,234.56
 abc.3456  →  0.3456
 1234.5a  →  1234


Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim s, v
s = TextBox1.Text
If Len(s) > 1 Then
v = Split(s, ".")
s = IIf(IsNumeric(v(0)), Format(v(0), "#,###"), "0")
If v(0) = "" Or v(0) = "0" Then s = "0"
If UBound(v) > 0 Then
If v(1) <> "" And IsNumeric(v(1)) Then s = s & "." & v(1)
End If
End If
TextBox1.Text = s
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!
コピペして使ってみたら上手くいきました。
大変参考になりました。

お礼日時:2022/04/12 11:25

おはようございます。



一例になりますが、数字を入力後のエンターキーで、表示形式を変更する
方法になります。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> 13 Then Exit Sub
Dim myValue As Variant
If Not IsNumeric(TextBox1.Value) Then Exit Sub
myValue = Val(TextBox1.Value)
If myValue = Int(myValue) Then
TextBox1.Value = Format(myValue, "#,##0;[赤]-#,##0")
Else
TextBox1.Value = Format(myValue, "0.00")
End If
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
上手く使えました。

小数点第2位までしか使用しない今の段階では問題なく使えるのですが
小数点第3位以下の入力ができないので
別の方をベストアンサーに選ばせていただきました。

お礼日時:2022/04/12 11:35

こんにちは



".##"や".00"ではなく、".#0"としてもうまくいきませんか?

>textboxに小数点を入力した時点で~~表示されてしまい
>小数点以下の部分に数字を入力できません。
どのタイミングのイベントで書き直しているのか、質問文には記載がありませんが、1文字ずつの入力に対して行っているのでしょうか?
changeやexitのタイミングになさってみてはいかがでしょうか?


ご質問には関係ありませんけれど、数字入力を想定しているテキストボックスと推測しますが、文字(abcなど)入力を制御するような仕組みにはなっているのでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

Private Sub TextBox1_Change() としてます。
”.#0" としても、小数点を入力すると .00と表示されてしまいます。

文字入力の制御などはないと思います。

お礼日時:2022/04/11 16:13

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A