• 締切済み

"DO LOOP"

テキストボックスに数値を入れると Do Loopでその数値の整数部分が何桁かを計算して、 ラベルに表示させるプログラムを作りたいです。 その時の、終了条件がわかりません。 (出来れば繰り返し実行されるステートメントお願いします。) 教えてください。お願いします。

みんなの回答

  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.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

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

どもども 田吾作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 でわでわ

関連するQ&A

  • Do..Loopステートメントの使い方について

    現在、入門書を画面で確認しながら ExcelVBAの勉強をしています。 Do...Loopで躓いてしまいました。 Do...Loopステートメントの種類は 条件を満たすまでループするもの Do Until...Loop(ループの前で条件判断) Do...Loop Until(ループの後で条件判断) 条件を満たす間はループするもの Do While...Loop(ループの前で条件判断) Do...Loop While(ループの後で条件判断) とあって、 例えば、A1からA7まで文字が入力されていて 空白のセルになるまで太文字にするとしたら、 ループの前に条件判断していると A1が空白だと処理はされず ループの後で条件判断すると A1が空白でも処理はされる とありました。 とすると、 条件判断はループ後にした方が良いと言う事なのでしょうか。 (空白でも処理してくれるので) 自分が処理したいものが ループ「後」にするのか又は ループ「前」にするのか どのように判断すれば良いのかと言うことと、 また、 条件を満たすUntil(まで)とWhile(間) どちらを使用すれば良いのかの判断方法もわかりません。 超初心者の質問内容で申し訳ありません。 VBAって面白いなぁと思い始めたところで なんとか理解したいので 教えていただけると大変助かります。 よろしくお願いします。

  • VBA Do…Loopについて

    お世話になっております。 ただいま、アクセスVBAにてDo…Loopの練習をしております。 テキストボックス1に数字を入れ、コマンドボタンを押すと入力した数字が1ずつ引かれる形でテキストボックス2に入るようにしたいです。 (テキストボックス1に「8」→テキストボックス2に「87654321」のように) Dim I As Variant I = Me.text1.Value Me.text2.Value = Me.text1.Value Do Until I = 1 I = I - 1 Me.text2.Value = Me.txt2.Value & I Loop で動作そのものはするのですが、doloop前の「Me.text2.Value = Me.text1.Value」を正さないといけないようです。(課題です) これがないと入力された数字そのものが入らなくなってしまうのですが… よろしくおねがいします。

  • 2重のDo~Loopは?

    Excel VBAですが、A列にデータが入っています。 A列のデータが変わるまで 処理1 を実行し、変われば 処理2 を実行する。データがなくなれば終了する方法が分りません。宜しくお願いします。 i = 2 Do Until Cells(i, 1) = "" Do Until Cells(i, 1) <> Cells(i - 1, 1) 処理1 Loop 処理2 Loop

  • Do Loopをキーボードで抜けるには

    エクセルVBAでDo Loopを使って繰り返し表示するプログラムを組んでいます。 このループを終わらせるにはEscを押せば強制終了しましたがキーボードの任意のキーで抜けるもしくは終了させる方法を教えてください。 エクセルのバージョンは「2007」です。

  • 【VBA】DoUntil Loopを1度のみ実行

    いつもお世話になっております。 Excel2003を使用しております。 「この条件になるまで続行」というのは Do Until Loop だと思うのですが、 ループをしたくないけれど Do Until Loop を利用したい場合(条件になったら即終了したい) Do Until Flag=True 実行したいこと 実行したいこと2 実行したいこと3 Exit do Loop また、やりたいこととしては、 FlagがTrue になったら、プロシージャから抜けたいと思っています。 その場合は、 Do Until Flag=True  実行したいこと  実行したいこと2  実行したいこと3  Exit do Loop If Flag=True Then   Exit sub End if このように、別々?に書く以外に方法はないでしょうか? 出来れば、簡単なIF文で実行できないかと思ったのですが… 話がごちゃごちゃしていて分かりにくいので、質問事項のみまとめますと、 ● 条件になったら終了させる。 これは、Do~Loop 、For Next のみの動作でしょうか? ● ループから抜けると同時にSubを終了させるには、ループの外にIF文を書くしかない? 以上、よろしくお願い致します。

  • Excel VBA 時刻でのDo~Loopの抜け方

    いつもお世話になっております。 Excel VBA 時刻でのDo~Loopの抜け方を教えてください。 下記のような記述で、時刻(時間)の条件を満たした時 ループを抜けるように設定したのですが、 時刻が「8時」とか「15時」というように 時間でしか対応しません。 「何時何分」という設定にも対応するためには どのように記述すればよいか教えてください -------の部分は何らかの記述が入っているものとしてください。 ↓このように記述しました Do Until MyHour > 15 MyHour = Hour(Now) ------------------- -------------------- -------------------- Loop どうぞ、よろしくお願いします。

  • Loopの使い方について

    Rubyで 数字を下記のようなやり方では1~12 までの数字をまわせるプログラムと 文字のa~l までまわせるプログラムを合体させたいのですがどのようにすればよいでしょうか? #1-12 までの数値をまわすソース n=1 loop do puts n if n == 12 break end n += 1 end 実行結果↓ 1 2 3 4 5 6 7 8 9 10 11 12 # a~ lの小文字をまわすソース ["a","b","c","d","e","f","g","h","i","j","k","l"].each do |n| puts n end 実行結果 a b c d e f g h i j k l 上記のプログラムをあわせて、実行結果が、↓ 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j 11 k 12 l ↑ このようにするには、どのようにすればよいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • Do~Loopを使いセルからテキストボックスへ値取得方法

    現在Excel2000を使用しています。 セルのA1からA5までそれぞれ名前が入っており、ユーザーフォームにはテキストボックスが1~5まで並んでいます。そこでDo~Loopを使用してテキストボックスにそれぞれ名前を取得しようとしていますが、うまくいきません。 Sub 営業担当者取得() Dim E As Integer Workbooks("kojh.xls").Activate Workbooks("kojh.xls").Sheets("営業担当者").Range("a1").Select E = 1 With 営業担当者登録 Do .TextBox(E) = ActiveCell.Text ActiveCell.Offset(1).Select E = E + 1 Loop Until ActiveCell = "" End With End Sub .TextBox(E)の部分でエラーが出てしまいます。このような使用方法はできないのでしょうか? もしくは他にやりかたがあれば教えて下さい。 よろしくお願いします。

  • Do文の中にタイマーを・・・

    VBは初心者ではないのですが、作っているものがとても複雑なものなので教えていただきたいと思い書き込みました。 現在製作中のプログラムにDo文をセットし、Do~Loopの間にタイマーを動かすプログラムを作りたいと思います。 普通にタイマーを起動する場合は Timer1.Enabled = True でよいと思うのですが、タイマーの中にDo文の条件になるように変数を変えていくプログラムが入っているのです。 だからといって、Call文を使うとタイマー内の処理が1回しか行われないので無理です。 なので、「○○ミリ秒後に次の行のプログラムを実行」みたいな構文はないものでしょうか? または、タイマーを起動させ、タイマーが終了したらDo文の中に戻るようなプログラムはありませんか? 難しい質問とはわかっていますがよろしくお願いします。