tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル IF文で判断ミス
投稿日: 2009/05/14(Thu) 23:50
投稿者ゆき
いつも参考にさせてもらってます。
WINDOWSXP、VB6にて検査システムを作成しています。
サーバから検査データを抽出し、検査結果に対しIF文を使用させて
合否判断をする形で考えています。
まず、複数レコード有る抽出データをグリッドに読み込みます。
(1レコードに対しカラム方向に複数の検査項目結果が在ります)

グリッド 検査項目→
↓番号   a   b   c   d   e・・・・・・z 判定結果
A         1   2   8   4   3           2   合格
B     5   5   3   4   7            5  e不良
C     1   3   5   9   2            9  d不良    

Do〜Loopを使用しA,B,Cと順に判定します。
各項目a〜zの規格に対し規格外で在れば判定結果に何不良と表示します。

で、以下が判定に際し使用している記述です。
この記述で現象としておかしな所はある幾つかの検査項目の条件判断結果が
正常で無い事です。
例えば、検査項目cに関して規格最大が6規格最小が0の場合でグリッド上の
検査結果が5でも判定結果が不良と判断されたり、同検査項目で検査結果が1
で合格と判断されます。
私が見る限りではおかしい所は無いと思えるのですが、記述の誤りで判断結果
がおかしいのか、それともIF文自体をこういった形でたくさん使用しているの
が悪いのか、ご指摘ご指導して頂ければ勉強になります。
宜しくお願いいたします。

ちなみにこの判定方法では規格外が二つ以上あればグリッド上のカラムの数字が
大きい方から不良と判断されるのは、致し方ないですが。。。
そこには会えて触れないで下さいね。

ROWNO = 1 'グリッドのrows

Dim OUT_F As Long

Do Until INSDATARS.EOF

    OUT_F = 0
    
  With MSFlexGrid1
  Select Case INSDATARS!Max a
    Case "0"
           Select Case INSDATARS!Min a
                Case 0 '●規格無
                Case Is > 0 '●下限片側規格
                    If .TextMatrix(ROWNO, 2) < INSDATARS!Min a Then OUT_F = "1"
           End Select
    Case Is > 0
            Select Case INSDATARS!Min a
                Case 0 '●上限片側規格
                    If .TextMatrix(ROWNO, 2) > INSDATARS!Max a Then OUT_F = "1"
                
                Case Is > 0 '●両側規格
                    If .TextMatrix(ROWNO, 2) > INSDATARS!Max a Then OUT_F = "1"
                    If .TextMatrix(ROWNO, 2) < INSDATARS!Min a Then OUT_F = "1"
            End Select
    End Select

    Select Case INSDATARS!Max b
    Case "0"
           Select Case INSDATARS!Min b
                Case 0 '●規格無
                Case Is > 0 '●下限片側規格
                    If .TextMatrix(ROWNO, 3) < INSDATARS!Min b Then OUT_F = "2"
           End Select
    Case Is > 0
            Select Case INSDATARS!Min b
                Case 0 '●上限片側規格
                    If .TextMatrix(ROWNO, 3) > INSDATARS!Max b Then OUT_F = "2"
                
                Case Is > 0 '●両側規格
                    If .TextMatrix(ROWNO, 3) > INSDATARS!Max b Then OUT_F = "2"
                    If .TextMatrix(ROWNO, 3) < INSDATARS!Min b Then OUT_F = "2"
            End Select
    End Select
      ・
     ・
     ・
'----------------------------------------------------------------------------
    Select Case OUT_F
        Case 1
            .TextMatrix(ROWNO, 20) = "a不良"
        Case 2
            .TextMatrix(ROWNO, 20) = "b不良"
        Case 3
            .TextMatrix(ROWNO, 20) = "c不良"
     ・
     ・
     ・
    End Select
    
    End With
    
    ROWNO = ROWNO + 1
    
    INSDATARS.MoveNext
    
Loop

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。