小数点の位置を固定するには?

解決


佐々木  2004-05-10 17:20:28  No: 113086

キーボードから数字を入力した際に小数点の位置を小数点以下二桁表示のまま固定をしたいのですがうまくいきません。例えば1を入力したら表示は「0.01」続いて2を入力すると「0.12」さらに「1.23」「12.34」「123.45」というようにtextで表示させ、変数も表示されたものにしたいのです。複雑なプログラムになって処理が遅くなっても構いません。お願いします。教えてください。


特攻隊長まるるう  2004-05-10 19:13:39  No: 113087

テキストが変更されたら10倍するのでとりあえずは動作しそうですが…
(コピペとかしない限り…、あとデリートとかもあるのか?とか…
0の入力時を考えると… Format の処理もあった方が良さそうです)
詳しい仕様が分からない状態で言えるのはこんなところでしょうか。
>うまくいきません
と書かれてもこちらには何が上手くいかないか分かりません。
自分のやった事や結果、上手くいかない部分もちゃんと説明して下さい。


佐々木  2004-05-12 15:56:25  No: 113088

特攻隊長まるるうさん、ご指摘ありがとうございます。

Option Explicit
Private Sub Form_Load()
Text1.Text = "0.00"
End Sub

Private Sub Text1_GotFocus()
Text1.SelStart = 4
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
KeyAscii = 0
Exit Sub
End If
Text1.Text = Mid(Text1.Text, 3, 1) & "." & _
Right(Text1.Text, 1) & Chr(KeyAscii)
Text1.SelStart = 4
KeyAscii = 0
End Sub

これだと1.23まではうまくいくんですがその次が2.34となり、1が消えてしまいます。どこを直せばよいのでしょう。
よろしくお願いします。


特攻隊長まるるう  2004-05-12 18:13:17  No: 113089

> どこを直せばよいのでしょう。
それは、もちろん
>    Text1.Text = Mid(Text1.Text, 3, 1) & "." & _
>                Right(Text1.Text, 1) & Chr(KeyAscii)
でしょうね。…他に直すようなコードありませんし(^^;)
このコードの意味は、テキストボックスの文字列の3番目から1文字取って
小数点つけて、右端から1文字取って引っ付けて、入力された文字を引っ付ける。
…であってますか?つまり、文字列の3番目が小数桁1桁目で、しかも
右端の1文字が、修正後の文字列の小数桁1桁目でないと機能しません。

これだと整数部1桁、小数部2桁しか対応できません。
>これだと1.23まではうまくいくんですがその次が2.34となり、1が消えてしまいます。
そーゆーコードです。後はフォームロード時の Text1 文字列設定を
    Text1.Text = "00.00"
とか
    Text1.Text = "0.010"
とかにしちゃうと変な動きになっちゃいます。

この方法を取るのであれば
1:小数点の位置を文字列から見つける。
2:小数点の位置から文字列を小数部と整数部に別ける。
3:整数部の右端に小数部の左端の1文字を付ける。
4:整数部、小数点、小数部の残り、入力された文字の順に引っ付ける。
といった順で処理すればいいでしょう。

小数点の位置を見つけるには InStr 関数を使ってみて下さい。
ついでにヘルプ(MSDN)で『文字列操作に関するキーワード一覧』を検索して
文字列の編集に使える関数について学んでおく事をお勧めします。


通りすがり  2004-05-12 18:23:38  No: 113090

こんなやり方はどうでしょう?
テキストから"."を取って右から3番目に"."を入れてあげる


あぬひ  2004-05-13 05:35:44  No: 113091

text1.text="0.00"

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then: KeyAscii = 0: Exit Sub
Text1.Text = Mid(Text1.Text, 1, Len(Text1.Text) - 3) & Right(Text1.Text, 2) & Chr(KeyAscii)
If Left(Text1.Text, 1) = "0" Then: Text1.Text = Mid(Text1.Text, 2)
Text1.Text = Mid(Text1.Text, 1, Len(Text1.Text) - 2) & "." & Right(Text1.Text, 2)
KeyAscii = 0
End Sub


佐々木  2004-05-14 22:24:32  No: 113092

特攻隊長まるるうさん、通りすがりさん、あぬひさんありがとうございました。
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then: KeyAscii = 0: Exit Sub
Text1.Text = Mid(Text1.Text, 1, Len(Text1.Text) - 3) & Right(Text1.Text, 2) & Chr(KeyAscii)
If Left(Text1.Text, 1) = "0" Then: Text1.Text = Mid(Text1.Text, 2)
Text1.Text = Mid(Text1.Text, 1, Len(Text1.Text) - 2) & "." & Right(Text1.Text, 2)
KeyAscii = 0
End Sub
これで解決しました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加