テキストボックスに数値を入れると
Do Loopでその数値の整数部分が何桁かを計算して、
ラベルに表示させるプログラムを作りたいです。

その時の、終了条件がわかりません。
(出来れば繰り返し実行されるステートメントお願いします。)

教えてください。お願いします。

A 回答 (2件)

終了条件は 入力値をすべてチェックしたとき、もしくは途中で数値以外の入力値があった場合だとおもいます。



整数部分の桁数ということなので Fix もしくは Int 関数を使用
符号の桁数カウント防止のため Abs関数(絶対値)を使用
しました。


Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

Dim lCnt As Long 'カウント
Dim lMaxCnt As Long '最大カウント
Dim lDspCnt As Long '表示用カウント

'ENTERキー
If KeyCode = vbKeyReturn Then

'最大文字数取得
lMaxCnt = Len(Trim$(Text1.Text))
lCnt = lMaxCnt

Label1.Caption = "" 'レベルクリア

lDspCnt = 0 '表示用カウントクリア

Do Until lCnt = 0

'数値チェック
If IsNumeric(Mid$(Trim$(Text1.Text), lCnt)) = True Then

lDspCnt = Format$(Fix(Mid$(Trim$(Text1.Text), lCnt)), "#0") '少数点を切り捨て
lDspCnt = Abs(lDspCnt) '絶対値を求める
lDspCnt = Len(CStr(lDspCnt)) '整数部分の文字数

Else
'数値以外
Exit Do
End If
lCnt = lCnt - 1

Loop

Label1.Caption = lDspCnt & "桁"

End If

End Sub
    • good
    • 0

どもども 田吾作7です。



なぜDoLoopがいいのかな?DoLoopよりもっと便利な方法がありますよ。
一応3パターンありますので、好きなのを使ってください。

'DO_LOOPにより整数部分を求める
Function func_DoLoop(inSrNumber As String) As Long
Dim wkCount As Long
Dim wkLength As Long

'全体の長さを求める
wkLength = Len(inSrNumber)

'とりあえず一文字目を指定
wkCount = 1

'最後の桁までいったら終了
Do Until wkCount > wkLength
'もしピリオドだったら抜ける
If Mid$(inSrNumber, wkCount, 1) = "." Then
func_DoLoop = wkCount - 1
Exit Do
End If
wkCount = wkCount + 1
Loop
End Function

'InStrにより整数部分を求める
Function func_InStr(inSrNumber As String) As Long
Dim wkString As String
wkString = Left(inSrNumber, InStr(inSrNumber, ".") - 1)
func_InStr = Len(wkString)
End Function

'Valにより整数部分を求める
Function func_Val(inSrNumber As String) As Long
Dim wkString As String
wkString = Val(CLng(inSrNumber))
func_Val = Len(wkString)
End Function

でわでわ
    • good
    • 0

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


人気Q&Aランキング

おすすめ情報