■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#574-1桁数の読み方を教えて下さい愛馬村2002-08-30(金) 04:36
     #575-1RE#574:桁数の読み方を教えて下さいSay2002-08-30(金) 06:41
     #576-1RE#574:桁数の読み方を教えて下さいあき☆彡2002-08-30(金) 06:49
     #591-1RE#576:桁数の読み方を教えて下さい愛馬村2002-08-31(土) 04:45
     #592-0RE#576:桁数の読み方を教えて下さい愛馬村2002-08-31(土) 06:14
     #600-1RE#591:桁数の読み方を教えて下さいあき☆彡2002-08-31(土) 19:51
     #643-1RE#600:桁数の読み方を教えて下さい愛馬村2002-09-04(水) 03:58
     #645-1RE#643:桁数の読み方を教えて下さい愛馬村2002-09-04(水) 04:27
     #646-1RE#645:桁数の読み方を教えて下さい匿名6462002-09-04(水) 04:57
     #647-1RE#643:桁数の読み方を教えて下さいあき☆彡2002-09-04(水) 09:04
     #669-1RE#647:桁数の読み方を教えて下さい愛馬村2002-09-05(木) 03:50
     #670-1RE#646:桁数の読み方を教えて下さい愛馬村2002-09-05(木) 03:54
     #671-1RE#669:桁数の読み方を教えて下さいあき☆彡2002-09-05(木) 08:10
     #692-1RE#671:桁数の読み方を教えて下さい愛馬村2002-09-06(金) 00:10
#574-1
桁数の読み方を教えて下さい
いつもお世話になっております。

質問が二つあるのですが、関連していると思われるので一つの投稿に書かせていただきたいと思います。

まず、現在書いているコードを(一部省略して)示します。
やろうとしてる概要は、
「2つのテキストボックスにユーザーが数値を入力し、コマンドボタンを押すとその数値をファイルに保存する」
ということです。
2つのテキストボックスの名前はtxtTcn、txtTcpで、コマンドボタンはCommand1です。

***標準モジュール***
Type Material
    Name As String * 24     '名前。※この投稿では無視しています。
    tcn As String * 7       
    space As String * 2     'スペース読み捨て用
    tcp As String * 7
    line As String * 2      '改行コード読み捨て用
End Type
********************

***フォームモジュール***
Private Sub txtTcn_LostFocus(Index As Integer)
    i = Index
    txtTcn(i).Text = Format(CDbl(txtTcn(i).Text), "0.000")
End Sub
---------------------------------------------------------------------------------------
Private Sub txtTcp_LostFocus(Index As Integer)
    i = Index
    txtTcp(i).Text = Format(CDbl(txtTcp(i).Text), "0.000")
End Sub
---------------------------------------------------------------------------------------
Private Sub Command1_Click()
    Dim FileNum As Integer
    FileNum = FreeFile
    For i = 0 To 9
        Dim myMtrl As Material
        myMtrl.Name = cboMtrl(i).Text
        myMtrl.tcn = txtTcn(i).Text
        myMtrl.space = "  "
        myMtrl.tcp = txtTcp(i).Text
        myMtrl.line = vbCrLf
        Open "userBlockData.dat" For Random As FileNum Len = Len(myMtrl)
        Put FileNum, i + 1, myMtrl
        Close FileNum
    Next i
End Sub
************************

一つ目の質問は、【テキストボックスの数字を最大7桁に制限するにはどうしたらいいでしょうか】です。
フォーマット関数のところに"0.000"と書くことで、小数点以下は四捨五入してくれるようになりましたが、
整数部分にいくらでも数字が入ってしまいます。
"999.999"までしか入力を受け付けない("1000.000"はエラーにする)ようにするには、どうしたらよいのでしょうか。
 #桁数の数え方が分かれば何とかなりそうなのですが、それだけでも教えていただけますでしょうか。

二つ目の質問は、ファイルに書き出す際の質問です。
上記コードで、例えば下記のようにユーザーが書き込んだとします。
テキストボックスは右揃えにしてますので、下記のようになります。
****************
   Tcn      Tcp
  1.100    1.100
222.222  222.222
 33.300   33.300
****************
これをファイルに書き出すと、下記のようになります。(左にスペースがあるのはNameを入れていないためです)
***************************************
                        1.100    1.100   
                        222.222  222.222    
                        33.300   33.300     
***************************************

これを、右端をそろえて出力するようにしたいのです。

******************************************
                          1.100    1.100   
                        222.222  222.222    
                         33.300   33.300     
******************************************

テキスト形式のファイルに「右揃え」などないでしょうから、桁数を読んで、
合計桁数が5なら左にスペースを2桁入れる、6なら1桁入れる、、、、
という風なことを考えていますが、ここでもやはり桁数の読み方が分かりません。


単純に「桁数の読み方を教えて下さい」とだけ書いてもよかったのですが、
念のため、現在やっている詳細を書かせていただきました。
長文お許しください。
「桁数を読み込んで処理」以外の方法の方がよければ、それのヒントを下さってもありがたいです。

どなたかご回答をお願いいたします。
(ヒントのページを教えていただけるだけでも結構です)

では、失礼します。

_/_/_/_/_/_/_/_/_/
VB 6.0
Windows XP
サービスパックなし
_/_/_/_/_/_/_/_/_/
#575-1
RE#574:桁数の読み方を教えて下さい
回答1

Validateで 
If CDbl(Text1.txt) >= 1000 Then 
みたいな条件判断する。


回答2 

常套手段はたとえば
Right("       " & Text1.Text , 7 )
#576-1
RE#574:桁数の読み方を教えて下さい
ちょっと気になったのですが、
> ---------------------------------------------------------------------------------------
> Private Sub txtTcp_LostFocus(Index As Integer)
>     i = Index
>     txtTcp(i).Text = Format(CDbl(txtTcp(i).Text), "0.000")
> End Sub
> ---------------------------------------------------------------------------------------
txtTcpに数字以外を入力された場合ってエラーになりますよね?
IsNumeric 関数等で数値に変換出来るかチェックした方が良いと思います。
あとiの変数を定義している個所がありませんが、
Option Explicit
を書いていないのでしょうか?
使用する変数は必ず宣言して使うようにした方が良いです。

> 一つ目の質問は、【テキストボックスの数字を最大7桁に制限するにはどうしたらいいでしょうか】です。
> フォーマット関数のところに"0.000"と書くことで、小数点以下は四捨五入してくれるようになりましたが、
 (._. )( _・)(・_・ )( ・_・)アレ
四捨五入になってます?(;^-^A
こんな情報が・・・
http://support.microsoft.com/default.aspx?scid=kb;ja;jp418691
四捨五入はこんな感じにしておくとか・・・
   Text1.Text = Int(CDec(Text1.Text) * 1000 + 0.5) / 1000
(Int関数ではなくFix関数を使っても良いです。
 マイナス値の扱いが異なるので仕様に合う方を使ってください。)
四捨五入は関数を作っておいた方が良いと思います。

> 整数部分にいくらでも数字が入ってしまいます。
> "999.999"までしか入力を受け付けない("1000.000"はエラーにする)ようにするには、どうしたらよいのでしょうか。
>  #桁数の数え方が分かれば何とかなりそうなのですが、それだけでも教えていただけますでしょうか。
エラーにするタイミングは?
Command1_Clickで良いのでしょうか?
文字数はLen関数で取得出来ます。(Openステートメントで使っていますよね?)
ファイル取得前に入力チェックを行う様にすれば良いと思います。
入力チェックをこんな感じに作成して・・・(実行してないので間違っている個所があるかも(;^^)ヾ(・・;)ォィォィ)

Private Function fbInputCheck() As Boolean
    fbInputCheck = False
    Dim i As Integer
    For i = 0 To txtTcn.Count - 1
        If Len(txtTcn(i).Text) > 7 Then
            MsgBox "入力範囲を超えています。"
            txtTcn(i).SetFocus
            Exit Function
        End If
    Next i
    For i = 0 To txtTcp.Count - 1
        If Len(txtTcp(i).Text) > 7 Then
            MsgBox "入力範囲を超えています。"
            txtTcp(i).SetFocus
            Exit Function
        End If
    Next i
    fbInputCheck = True
End Function

Command1_Clickの先頭で
    If Not fbInputCheck Then Exit Sub
と入力チェックがエラーだったらファイル出力を行わず処理を抜ければ良いと思います。


> テキスト形式のファイルに「右揃え」などないでしょうから、桁数を読んで、
> 合計桁数が5なら左にスペースを2桁入れる、6なら1桁入れる、、、、
> という風なことを考えていますが、ここでもやはり桁数の読み方が分かりません。
Dim sWk As String
sWk = Right(Space(7) & txtTcn(i).Text, 7)
又は、
sWk = Format(txtTcn(i).Text, "@@@@@@@")
とすれば良いです。

入力チェックでも桁数揃えでも7を使いますが、
Constを使った方が良いと思います

Public Const NAME_LENGTH As Long = 24
Public Const TCN_LENGTH As Long = 7
Public Const TCP_LENGTH As Long = 7
Type Material
    Name As String * NAME_LENGTH '名前。※この投稿では無視しています。
    tcn As String * TCN_LENGTH
    space As String * 2           'スペース読み捨て用
    tcp As String * TCP_LENGTH
    line As String * 2            '改行コード読み捨て用
End Type

こうしておけば
入力チェックの所は
        If Len(txtTcn(i).Text) > TCN_LENGTH Then
桁数揃えは
sWk = Right(Space(TCN_LENGTH) & txtTcn(i).Text, TCN_LENGTH)
又は、
sWk = Format(txtTcn(i).Text, String(TCN_LENGTH, "@"))
と書く事が出来、将来7が8に変わってもConstを修正するだけで済みます。
#591-1
RE#576:桁数の読み方を教えて下さい
本当に長文で失礼いたします。
複数の再質問がございますが、部分的にでもご返答いただけると助かります。

Say さん、あき☆彡さん、ありがとうございました。
Sayさんが挙げてくださった常套手段は、その後のあき☆彡さんのご返信の中にも後半にあったものですよね。
ここではあき☆彡さんの投稿を引用して書かせていただいておりますが、お二人ともどうもありがとうございましたm(__)m

> ちょっと気になったのですが、
> (中略)
> txtTcpに数字以外を入力された場合ってエラーになりますよね?
> IsNumeric 関数等で数値に変換出来るかチェックした方が良いと思います。

はっ(゜o゜)
申し訳ありません。。。
今回関係ある部分だけをと思って省略していました。
でも、それならそうと書かないと、Private Sub から End Subまで書いている以上、全て書いていると思われて当然ですよね。
ご指摘ありがとうございます。
実際は、下記のように書いております。
(何も入力せずに飛ばしたときはLostFocusの時点ではエラーとしないようにしてます。)
---------------------------------------------------------------------------------
Private Sub txtTcp_LostFocus(Index As Integer)
    i = Index
    
    If txtTcp(i).Enabled = True Then
        If txtTcp(i).Text = "" Then 
            On Error Resume Next
        Else                        
            On Error GoTo ErrHandler
        End If
        txtTcp(i).Text = Format(CDbl(txtTcp(i).Text), "0.000")
    End If
    Exit Sub
    
ErrHandler:
    response = MsgBox("正しい数値を入力してください", vbExclamation + vbOKOnly, "入力エラー")
    txtTcp(i).SetFocus              
    txtTcp(i).SelStart = 0                     
    txtTcp(i).SelLength = Len(txtTcp(i).Text)  
End Sub
---------------------------------------------------------------------------------

> あとiの変数を定義している個所がありませんが、
> Option Explicit
> を書いていないのでしょうか?
> 使用する変数は必ず宣言して使うようにした方が良いです。

分かりました!
このフォームには Option Explicit は書いておりませんでした(^^ゞ
ここでちょっと関連した質問なのですが、宣言にDim、Static、Private、Publicなどがありますよね。
これらの違いを書いたヘルプページを教えて頂けませんでしょうか。。。
情けないことに、理解したつもりが理解してなかったようです。。。

下記のような不思議な現象が起こったのです(理解している方は不思議じゃないと思いますが^^;)。
まず、Option Explicit を書いて実行し、未宣言で引っかかったところを、
Private Sub の中に順に Dim で宣言することで解決していきました。
上のコードの中では、i と response が引っかかりました。
i も response もこのフォーム内に複数あります。
i は、ある一つの Private Sub で Dim i As Integer と宣言すると、他のところはもう引っかかりませんでした。
これから、Dim は各 Private Sub に書く必要がないと思い、フォームの冒頭に書くことにしました。
次に、response に関して、試しに Private Sub の中に書いてみました。
(Dim response As _____ :Integer でなく何と書いていいか分からなかったので、Dim response とだけ書きました。
何と書いたらいいか、どうやったら分かるのでしょうか・・・)
そうすると、その Private Sub の中の response だけ改善され、他は引っかかりました。
そこで Dim response も冒頭に書いたところ、記述は一回で済みました。

この違いは何なのでしょうか?
ヘルプを読めば分かりますでしょうか?
Dim はプロシージャ内に書くべきだとどこかで読んだ気がするのですが、そうなのでしょうか?
そうだとすると、Dim i As Integer は、たとえ一回どこかで書けば他は Option Explicit に引っかからないとしても、
何回も書いた方がいいのでしょうか?

>  (._. )( _・)(・_・ )( ・_・)アレ
> 四捨五入になってます?(;^-^A
> こんな情報が・・・
> http://support.microsoft.com/default.aspx?scid=kb;ja;jp418691

あっ!!!
確かに、四捨五入に見えたけど、「丸め」でした。。。

> 四捨五入はこんな感じにしておくとか・・・
>    Text1.Text = Int(CDec(Text1.Text) * 1000 + 0.5) / 1000
> (Int関数ではなくFix関数を使っても良いです。
>  マイナス値の扱いが異なるので仕様に合う方を使ってください。)
> 四捨五入は関数を作っておいた方が良いと思います。

ありがとうございますm(__)m
そういえば、マイナスもエラーにしないといけないんでした・・・(^^ゞ
まだInt関数、Fix関数を学んでませんが、マイナスをエラーにして、プラスだけに合う方がどちらか勉強してみます。 

> エラーにするタイミングは?
> Command1_Clickで良いのでしょうか?

タイミングはまだ考え中ですが、できればその桁数打ち込んだら次のボックスに移るようなのが時々ありますよね?
ああいう感じをイメージしているのですが・・・
Tabを発生させて次のボックス(TabIndexが一つ多いところ)に移る方法は、どこかで見ましたので、
文字数が7になったらそうなるように書けばいいかなぁと考えてました。
しかし、小数点が入ってくるとなるとあまりうまくいきそうにない気がしていました。。。(^^ゞ

> 文字数はLen関数で取得出来ます。(Openステートメントで使っていますよね?)

あ、そうか!
使ってました(^_^;)
学習能力ないなぁ。。。

> ファイル取得前に入力チェックを行う様にすれば良いと思います。
> 入力チェックをこんな感じに作成して・・・(実行してないので間違っている個所があるかも(;^^)ヾ(・・;)ォィォィ)
>
> 
> Private Function fbInputCheck() As Boolean
>     fbInputCheck = False
>     Dim i As Integer
>     For i = 0 To txtTcn.Count - 1
>         If Len(txtTcn(i).Text) > 7 Then
>             MsgBox "入力範囲を超えています。"
>             txtTcn(i).SetFocus
>             Exit Function
>         End If
>     Next i
>     For i = 0 To txtTcp.Count - 1
>         If Len(txtTcp(i).Text) > 7 Then
>             MsgBox "入力範囲を超えています。"
>             txtTcp(i).SetFocus
>             Exit Function
>         End If
>     Next i
>     fbInputCheck = True
> End Function
> 
> Command1_Clickの先頭で
>     If Not fbInputCheck Then Exit Sub
> と入力チェックがエラーだったらファイル出力を行わず処理を抜ければ良いと思います。


わざわざ書いてくださって、ありがとうございます。
上記コードで、fbInputCheck の使い方が分かってないようなのですが。。。(そこが一番重要だろうに^^;)
【fbInputCheck = False】 とは日本語でいうとどういうことなのでしょうか?
同様に、【fbInputCheck = True】【If Not fbInputCheck】も分かりません。。。m(__)m
あ、その前に【Private Function fbInputCheck() As Boolean】が分かりません。
この Function はどういったときに起こるものなのか・・・

> Dim sWk As String
> sWk = Right(Space(7) & txtTcn(i).Text, 7)
> 又は、
> sWk = Format(txtTcn(i).Text, "@@@@@@@")
> とすれば良いです。

もうしわけありませんが、このコードをどこに書けばよいのでしょうか?
ファイル出力は、下記のようなコードになっております。
-----------------------------------------------------------------------------------
Private Sub Command1_Click()
    Dim FileNum As Integer
    FileNum = FreeFile
    For i = 0 To 9
        If cboType(i).Enabled = True And cboType(i).Text = "新規登録" Then
            Dim myMtrl As Material
            myMtrl.Name = cboMtrl(i).Text
            myMtrl.tcn = txtTcn(i).Text
            myMtrl.space = "  "
            myMtrl.tcp = txtTcp(i).Text
            myMtrl.line = vbCrLf
            Open "userBlockData.dat" For Random As FileNum Len = Len(myMtrl)
            Put FileNum, i + 1, myMtrl
            Close FileNum
        End If
    Next i
End Sub
-----------------------------------------------------------------------------------


> 入力チェックでも桁数揃えでも7を使いますが、
> Constを使った方が良いと思います

これについてはしっかり理解いたしました!(^^)

どうもありがとうございました。

再質問がたくさんあり、長文になって申し訳ありませんでした。
部分的にでもご返答いただける方、よろしくお願いいたします。

では、失礼します。

_/_/_/_/_/_/_/_/_/
VB 6.0
Windows XP
サービスパックなし
_/_/_/_/_/_/_/_/_/
#592-0
RE#576:桁数の読み方を教えて下さい
あき☆彡 さん

> txtTcpに数字以外を入力された場合ってエラーになりますよね?
> IsNumeric 関数等で数値に変換出来るかチェックした方が良いと思います。

おかげさまで助かりました。
下に書きました、私が作っていたエラーに、マイナスの場合を加えたものでは、
【0-1】
などの入力をトラップできていませんでした。
今ではIsNumericを使って、今のところ問題なさそうです。

ありがとうございました。
ご報告でした(*^_^*)
#600-1
RE#591:桁数の読み方を教えて下さい
長文失礼致しますm(_ _;)m

> そこで Dim response も冒頭に書いたところ、記述は一回で済みました。
> この違いは何なのでしょうか?
ローカル変数とモジュール変数の違いです。
ローカル変数:プロシージャ内で有効
モジュール変数:モジュール内で有効
> ヘルプを読めば分かりますでしょうか?
ヘルプで〔変数の適用範囲〕を検索してみて下さい(^-^)/

> (Dim response As _____ :Integer でなく何と書いていいか分からなかったので、Dim response とだけ書きました。
> 何と書いたらいいか、どうやったら分かるのでしょうか・・・)
MsgBox 関数のヘルプを参照して下さい。
整数型 (Integer) の値を返します。と書かれてあると思います。
Dim response As Integer とすれば良いです。

> Dim はプロシージャ内に書くべきだとどこかで読んだ気がするのですが、そうなのでしょうか?
> そうだとすると、Dim i As Integer は、たとえ一回どこかで書けば他は Option Explicit に引っかからないとしても、
> 何回も書いた方がいいのでしょうか?
Dim i As Integer
Dim response As Integer
の値を他のプロシージャで使う事はないので、
私だったらローカル変数として各プロシージャ内に記述します。
でも・・・
>     i = Index
とせずIndexをそのまま
     If txtTcp(Index).Enabled = True Then
と使うし、
>     response = MsgBox("正しい数値を入力してください", vbExclamation + vbOKOnly, "入力エラー")
の戻り値はvbOKしか返ってこないので
     Call MsgBox("正しい数値を入力してください", vbExclamation + vbOKOnly, "入力エラー")
とするので、iもresponseも使いません(;^-^A

> > Private Function fbInputCheck() As Boolean
> >     fbInputCheck = False
    略
> >     fbInputCheck = True
> > End Function
> 上記コードで、fbInputCheck の使い方が分かってないようなのですが。。。(そこが一番重要だろうに^^;)
> 【fbInputCheck = False】 とは日本語でいうとどういうことなのでしょうか?
fbInputCheck関数の戻り値としてFalseを設定

> あ、その前に【Private Function fbInputCheck() As Boolean】が分かりません。
> この Function はどういったときに起こるものなのか・・・
起こるというか・・・
必要な時にこの関数を自分で呼ぶのです(*^-^*)
> >     If Not fbInputCheck Then Exit Sub
が関数fbInputCheckを呼んでいる所。
Function ステートメントのヘルプを参照して下さい。
使用例も書かれてあるので、それも参照して下さい。

> > sWk = Right(Space(7) & txtTcn(i).Text, 7)
> > 又は、
> > sWk = Format(txtTcn(i).Text, "@@@@@@@")
> もうしわけありませんが、このコードをどこに書けばよいのでしょうか?
編集したい項目で同じ様に書くだけなのですが、、、o(T-T)o
>             myMtrl.tcn = txtTcn(i).Text
             myMtrl.tcn = Format(txtTcn(i).Text, "@@@@@@@")

>             myMtrl.tcp = txtTcp(i).Text
             myMtrl.tcp = Format(txtTcp(i).Text, "@@@@@@@")

前回私の書いたのfbInputCheckは文字数のチェックのみでしたが・・・
ロストフォーカス時にOn Errorを使って数値チェックをしている様なので、
On Errorを使わずにチェックする例です。
あまり良い例ではないかもしれませんが・・・(;^-^A

Private Function fbInputCheck(oText As TextBox) As Boolean
    Dim dValue As Double
    fbInputCheck = False
    If oText.Text <> "" Then
        If Not IsNumeric(oText.Text) Then
            Call MsgBox("数値を入力して下さい", vbExclamation + vbOKOnly, "入力エラー")
            Exit Function
        End If
        dValue = CDbl(oText.Text) * 1000 + 0.5
        dValue = Fix(dValue) / 1000
        If dValue < 0 Then
            Call MsgBox("マイナス値は入力出来ません", vbExclamation + vbOKOnly, "入力エラー")
            Exit Function
        End If
        If dValue >= 1000 Then
            Call MsgBox("入力範囲を超えています", vbExclamation + vbOKOnly, "入力エラー")
            Exit Function
        End If
        oText.Text = Format(dValue, "0.000")
    End If
    fbInputCheck = True
End Function

Private Sub sTextHighLight(oText As TextBox)
    With oText
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
End Sub

と関数にしておけば
Private Sub txtTcp_Validate(Index As Integer, Cancel As Boolean)
    If Not fbInputCheck(txtTcp(Index)) Then
        Call sTextHighLight(txtTcp(Index))
        Cancel = True
    End If
End Sub
と使うだけです。

txtTcnも同じチェック方法ですよね?
今は同じコードを書いていると思いますが、
関数にしておく事で同じチェック関数を利用する事が出来ます。
Private Sub txtTcn_Validate(Index As Integer, Cancel As Boolean)
    If Not fbInputCheck(txtTcn(Index)) Then
        Call sTextHighLight(txtTcn(Index))
        Cancel = True
    End If
End Sub

Validate イベントはフォーカスを移動する前に発生するイベントです。
〔注意点〕(下の3つはSP4で修正済の情報ですが・・・)
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP417/2/87.asp
http://support.microsoft.com/default.aspx?scid=kb;ja;jp257543
http://support.microsoft.com/default.aspx?scid=kb;ja;jp257741
http://support.microsoft.com/default.aspx?scid=kb;ja;jp257792
#643-1
RE#600:桁数の読み方を教えて下さい
>あき☆彡さん
本当にいつもありがとうございます。
今回はヤットかなり理解できましたので、理解できた部分は省略します。(長文を避けるため)
本当にお詳しいご説明のおかげで、ばか者でもほぼ理解できました\(^o^)/

> > >     If Not fbInputCheck Then Exit Sub
> が関数fbInputCheckを呼んでいる所。
> Function ステートメントのヘルプを参照して下さい。
> 使用例も書かれてあるので、それも参照して下さい。

しつこく質問してすみませんが・・・m(__)m
【If Not fbInputCheck Then Exit Sub】
とは、日本語で言うとどういう風に関数fbInputCheckを呼んでいるのでしょうか?
gotoだとかなら何となく分かるんですが・・・
Function ステートメントや、Callのところも読みましたが、どうも分かりません。
細かく言うと、
【If Not fbInputCheck】:?『fbInputCheckじゃなかったら・・・』?
             If fbInputCheck = False のような意味でしょうか?
             ご教授いただいたコードではtxtTcn、txtTxpに正しい数値を記入した時のみ
             fbInputCheck = True になるようでしたので、
             そんな感じなのかな、と予想してるのですが・・・(^^ゞ
【Then Exit Sub】:意味自体は分かりますが、これで関数fbInputCheckを呼んでいるというのが分かりません。
          Subを抜けるだけで、fbInputCheckに飛ばない気がするのですが・・・
          (実際書いたらうまくいくので飛んでるのでしょうが、どうも分かりません)

今回も例を書いてくださってありがとうございます。
その通りにすれば動くのですが、それだと成長しないので、しつこく質問してすみません。
名指しのように見えてしまって、あき☆彡さんにはご迷惑をおかけしておりますが、
名指しではありませんので、どなたか教えてくださる方がいらっしゃれば、よろしくお願いいたしますm(__)m

なお、ご報告ですが、書いていただいたコードだとマイナス判別のときに -0.001 などは受け付けてしまうので、
dValue ではなく oText.Text でマイナスかどうかを判別するように書き換えさせていただきました。m(__)m

_/_/_/_/_/_/_/_/_/
VB 6.0
Windows XP
サービスパックなし
_/_/_/_/_/_/_/_/_/
#645-1
RE#643:桁数の読み方を教えて下さい
#643の追記です。

#600のあき☆彡さんのお答えの、後半のコードで言いますと・・・

>Private Sub txtTcp_Validate(Index As Integer, Cancel As Boolean)  '分かります
>    If Not fbInputCheck(txtTcp(Index)) Then            '分かりません
>        Call sTextHighLight(txtTcp(Index))            '分かります
>        Cancel = True                       '分かります
>    End If                            '分かりません
>End Sub

つまり、Ifの条件が分かりません。
自分としましては、txtTcp_Validate が起こった時のIf文には、日本語で言うと
『【Private Function fbInputCheck】に飛んで、その結果、【fbInputCheck = False】だったら』
と書けばいいのかなと思っています。
が、それを自分で考えると、【Call fbInputCheck (txtTcp(Index))】とか、
【If fbInputCheck = False】とかいうコードになりそうな気がするのですが・・・

考え方が違うのでしょうか。
それとも、【If Not fbInputCheck(txtTcp(Index)) Then】には私が言っているような意味が含まれているのでしょうか。

質問をはっきりさせるため、自分がここまで考えたという部分を再投稿いたしました。
似たような内容での複数の投稿をお許しください。

では、失礼します。
#646-1
RE#645:桁数の読み方を教えて下さい
> #643の追記です。
> 
> #600のあき☆彡さんのお答えの、後半のコードで言いますと・・・
> 
> >Private Sub txtTcp_Validate(Index As Integer, Cancel As Boolean)  '分かります
> >    If Not fbInputCheck(txtTcp(Index)) Then            '分かりません
> >        Call sTextHighLight(txtTcp(Index))            '分かります
> >        Cancel = True                       '分かります
> >    End If                            '分かりません
> >End Sub
> 
> つまり、Ifの条件が分かりません。
> 自分としましては、txtTcp_Validate が起こった時のIf文には、日本語で言うと
> 『【Private Function fbInputCheck】に飛んで、その結果、【fbInputCheck = False】だったら』
> と書けばいいのかなと思っています。
> が、それを自分で考えると、【Call fbInputCheck (txtTcp(Index))】とか、
> 【If fbInputCheck = False】とかいうコードになりそうな気がするのですが・・・

【Call fbInputCheck (txtTcp(Index))】だと、戻り値Falseが得られなくて
【If fbInputCheck = False】だと引数txtTcp(Index)がないので、エラーになると思います(^^;

If fbInputCheck(txtTcp(Index)) = False Then
でもいいのですが、Not FalseはTrueなので
If Not fbInputCheck(txtTcp(Index)) = True Then
とも書けます。
さらにIf 条件式 Thenというのは、条件式がTrueだったらThen以下を実行するので
If Not fbInputCheck(txtTcp(Index)) Then
となります。

つまり
If Not fbInputCheck(txtTcp(Index)) Then
と
If fbInputCheck(txtTcp(Index)) = False Then
は、同じ意味なので、自分のわかりやすい方にしていということです。
#647-1
RE#643:桁数の読み方を教えて下さい
> 本当にお詳しいご説明のおかげで、ほぼ理解できました\(^o^)/
良かったです(*^.^*)

> なお、ご報告ですが、書いていただいたコードだとマイナス判別のときに -0.001 などは受け付けてしまうので、
> dValue ではなく oText.Text でマイナスかどうかを判別するように書き換えさせていただきました。m(__)m
(/_;)/アレー
 dValue = Fix(dValue) / 1000
   を
 dValue = Int(dValue) / 1000
とすれば-0.001もエラーになります(;T-TA
でも-0.0001だと四捨五入されて0になってしまうので・・・
oText.Textで判断する方法で良いと思います(;^-^A
        If CDbl(oText.Text) < 0 Then
か
        If Left(oText.Text, 1) = "-" Then
としているんですよね?

> 【If Not fbInputCheck Then Exit Sub】
> とは、日本語で言うとどういう風に関数fbInputCheckを呼んでいるのでしょうか?
呼んでいるのは
fbInputCheck の個所だけです。
以下の【1】【2】【3】【4】はどれも同じ処理になります。

【1】
	Dim bRtn As Boolean	  '戻り値設定用変数
	bRtn = fbInputCheck     '関数fbInputCheckを呼び、関数内で設定される戻り値True/Falseを変数bRtnに格納
	If bRtn = False Then    '変数bRtnに格納した値がFalseの場合(入力チェックにエラーがあった場合)
	    Exit Sub            '以下の処理を行わず、Subプロシージャを抜ける
	End If
	    ↓
【2】変数bRtnに格納せずに直接判断した場合です。
まずfbInputCheck関数が呼ばれ、True/Falseが戻り値として返ってきます
	If fbInputCheck = False Then    'fbInputCheck関数内で設定される戻り値がFalseの場合
	    Exit Sub                    '以下の処理を行わず、Subプロシージャを抜ける
	End If
	    ↓
【3】戻り値 = Falseと判断せずにNot演算子を使った場合です。
Not演算子は〔Not True → False〕〔Not False → True〕となります。
fbInputCheckの戻り値がFalseの場合、Not fbInputCheck と書く事でTrueになるのです。
	If Not fbInputCheck Then    'fbInputCheck関数内で設定される戻り値がFalseの場合
	    Exit Sub                '以下の処理を行わず、Subプロシージャを抜ける
	End If
	    ↓
【4】単一行形式でIF文を書いた場合です。
	If Not fbInputCheck Then Exit Sub
#669-1
RE#647:桁数の読み方を教えて下さい
>あき☆彡さん
またまた詳しいご説明をありがとうございますm(__)m

> oText.Textで判断する方法で良いと思います(;^-^A
>         If CDbl(oText.Text) < 0 Then
> か
>         If Left(oText.Text, 1) = "-" Then
> としているんですよね?

・・・えと・・・単に
        If oText.Text < 0 Then
としちゃってますが・・・マズいですか。。。(^^ゞ
あえて書いてくださってるってことはマズいんですよね・・・?
どなたかご解説いただけますか?

> 以下の【1】【2】【3】【4】はどれも同じ処理になります。
・・・(略)・・・

うおーーーー(ToT)
感激しました。
このような詳しい参考書が欲しいです。。。(^^ゞ
大変よく分かりました。
どうもありがとうございましたm(__)m
#670-1
RE#646:桁数の読み方を教えて下さい
匿名646 様

ご丁寧なご説明をありがとうございました。

> さらにIf 条件式 Thenというのは、条件式がTrueだったらThen以下を実行するので

こういう細かいところが、意外と分かってなかったりして躓いちゃうんですよね。。。(^^ゞ
このように説明してくださったおかげで、よく分かりました。
ありがとうございましたm(__)m
#671-1
RE#669:桁数の読み方を教えて下さい
> > oText.Textで判断する方法で良いと思います(;^-^A
> >         If CDbl(oText.Text) < 0 Then
> > か
> >         If Left(oText.Text, 1) = "-" Then
> > としているんですよね?
> 
>         If oText.Text < 0 Then
> としちゃってますが・・・マズいですか。。。(^^ゞ
> あえて書いてくださってるってことはマズいんですよね・・・?
TextプロパティはString型だから・・・
If "-123.45" < 0 Then
と比較している事になります。
内部で数値型に変換されるので、そのままでも動きますが、
データ型を意識して自分で明示的に型変換した方が良いです。
If CDbl("-123.45") < 0 Then
#692-1
RE#671:桁数の読み方を教えて下さい
>あき☆彡さん
いつもありがとうございます。

> TextプロパティはString型だから・・・
> If "-123.45" < 0 Then
> と比較している事になります。
> 内部で数値型に変換されるので、そのままでも動きますが、
> データ型を意識して自分で明示的に型変換した方が良いです。
> If CDbl("-123.45") < 0 Then

あ、なるほど。
他にもテキストボックス内の数値を使って計算させるところが今後たくさん出てきますので、
大変参考になりました。
どうもありがとうございましたm(__)m
これからもよろしくお願いいたします。
このページと関連する記事:
#265-3チェックボックスのチェック有無で内容を書き換えたい2003-08-06(水) 16:29
#29175-0SSTabに配置したテキストボックスのValidateイベントを発生させたい2000-09-03(日) 17:51
#13529-0CheckBoxについて2000-12-19(火) 21:08
#1572-3英数混在の数字部分のカウントアップ2001-11-15(木) 01:34
#44148-0Length2001-06-18(月) 17:27
#5203-0コマンドボタンでEnterキー2002-02-19(火) 11:06
#27451-0文字型の"0"を数値型でも読み込むには??2002-03-11(月) 16:13
#285-3CheckBoxについて2003-11-28(金) 08:46
#17587-0For...nextについて。2001-09-05(水) 11:55
#22504-0神経衰弱の作り方を教えてください2001-08-20(月) 10:04
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)