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と続く場合でも正しく入力できるようなマクロを教えていただけますでしょうか。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
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
No.3
- 回答日時:
おはようございます。
一例になりますが、数字を入力後のエンターキーで、表示形式を変更する
方法になります。
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
ご回答ありがとうございます。
上手く使えました。
小数点第2位までしか使用しない今の段階では問題なく使えるのですが
小数点第3位以下の入力ができないので
別の方をベストアンサーに選ばせていただきました。
No.1
- 回答日時:
こんにちは
".##"や".00"ではなく、".#0"としてもうまくいきませんか?
>textboxに小数点を入力した時点で~~表示されてしまい
>小数点以下の部分に数字を入力できません。
どのタイミングのイベントで書き直しているのか、質問文には記載がありませんが、1文字ずつの入力に対して行っているのでしょうか?
changeやexitのタイミングになさってみてはいかがでしょうか?
ご質問には関係ありませんけれど、数字入力を想定しているテキストボックスと推測しますが、文字(abcなど)入力を制御するような仕組みにはなっているのでしょうか?
回答ありがとうございます。
Private Sub TextBox1_Change() としてます。
”.#0" としても、小数点を入力すると .00と表示されてしまいます。
文字入力の制御などはないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
ちょっと先の未来クイズ第6問
2025年1月2日と1月3日に行われる、第101回箱根駅伝(東京箱根間往復大学駅伝競走)で、上位3位に入賞するチームはどこでしょう?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
Excel vba ユーザーフォームテキストボックス内の小数点表示
Visual Basic(VBA)
-
ユーザーフォーム上にある「テキストボックス」に小数が入力できない
Excel(エクセル)
-
-
4
ユーザーフォーム内のテキストボックス内の書式設定
Excel(エクセル)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
ユーザーフォームのTextに数値を入れるとセルにエ
Excel(エクセル)
-
7
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
10
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
11
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
12
変数をコントロール型で使用する方法
Visual Basic(VBA)
-
13
エクセルVBA:他シートを選択するとフォームを閉じたい
Excel(エクセル)
-
14
複数のテキストボックスに同じ処理をしたい
Visual Basic(VBA)
-
15
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
16
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
17
VBA:小数点以下の数字を取得できる関数は?
Visual Basic(VBA)
-
18
エクセル ユーザーフォームにオートシェープ(図形)を貼り付けるこは可能なのでしょうか?
Excel(エクセル)
-
19
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
20
エクセル UserForm 呼び出しでフリーズしてしまいます
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日本奨学金の継続届についてで...
-
VBAの構文で>を入力したいので...
-
エクセルの関数で、100%以下の...
-
Excelでユーザ名を入力すればそ...
-
エクセルの期間数(年月数)の...
-
Excelで=IF()と入力して、カッ...
-
Inputboxの表示位置(VBA)
-
セキュアブートがWindows側で有...
-
付き合って、『4年3ヶ月記念日...
-
英語で、結婚記念日&誕生日 ...
-
PCで登録途中の画面から認証コ...
-
エクセルの数値がある一定の数...
-
schoolを縮められませんか?
-
短縮した表示のしかたを教えて...
-
printscreenを押すと印刷されて...
-
「ベストアンサー」を選ばない...
-
ベストアンサーを選びたくない
-
疑問文でNoと答えるときの短...
-
テレビでYouTubeの検索をすると...
-
iPhone紛失
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日本奨学金の継続届についてで...
-
Excelのtextboxへの入力で小数...
-
Inputboxの表示位置(VBA)
-
数式の中の値にカンマをつけた...
-
ひらがな入力のとき、チェック...
-
VBAの構文で>を入力したいので...
-
Excelで=IF()と入力して、カッ...
-
Windows 2000プロダクトキース...
-
マカフィーの登録
-
エクセルの期間数(年月数)の...
-
画像変更
-
エクセルの関数で、100%以下の...
-
Excelで45行で1ずつ増える関数...
-
エクセル
-
クレジットカードの有効期限が...
-
エクセルでの質問です。小数点...
-
BIGLOBE何でも相談室について質...
-
schoolを縮められませんか?
-
セキュアブートがWindows側で有...
-
短縮した表示のしかたを教えて...
おすすめ情報
Private Sub TextBox1_Change()
TextBox1.Value = Format(TextBox1.Value, "#,###" & _
IIf(InStr(TextBox1.Text, ".0") <> 0, ".0#", IIf(InStr(TextBox1.Text, ".") = 0, "", ".##")))
End Sub
使用する値が小数点第2位までなので、上記のようにすることで
とりあえずは解決しましたが、
使用する値の小数点以下の位が増えたときに対応できません。
根本的な解決方法があれば教えていただきたいです。