1》一个FLEXGRID表格中,如  MSFlexGrid2.TextMatrix(i, 7)  第七列中  总共30行  每行格子里有个数据
现在要挑选出 最小的1个数 以及该数所在的行Dim min As Single
Dim row As Integer
min = Val(MSFlexGrid2.TextMatrix(1, 7))
For i = 1 To 30
If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(1, 7)) Then
min = Val(MSFlexGrid2.TextMatrix(i, 7))
End If
Next i
Text5.Text = min
Text10.Text = "RP" & row  
======
这组代码哪里错了啊?
运行的时候 要么是TEXT5里面显示的不是最小的数,要么是TEXT10里面显示最小数所在行 错误===========
2》如果在这组数里 选择 K个最小数  K是 TEXT6里输入的数字  怎么能选出来???一个问题20分 非常感谢 

解决方案 »

  1.   

    1,row没赋值。
    2,你要怎么选 K个?
      

  2.   

    Dim min As Single
    Dim row As Integer
    min = Val(MSFlexGrid2.TextMatrix(1, 7))
    row = 1
    For i = 1 To 30
    If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(row, 7)) Then
    min = Val(MSFlexGrid2.TextMatrix(i, 7))
    row = i
    End If
    Next i
    Text5.Text = min
    Text10.Text = "RP" & row  ====
    第一个解决了
      

  3.   

    =====
    恩 1 解决了2. 界面里有个TEXT框子,我在TEXT里面输入一个数字(就是K的值),然后 TEXT5.TEXT就显示出 30个数字里面最小的K个数字
      

  4.   


    Dim row As Integer 
    row = 1 
    For i = 2 To 30 
        If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(row, 7)) Then 
            row = i
        End If 
    Next i 
    Text5.Text = Val(MSFlexGrid2.TextMatrix(row, 7))
    Text10.Text = "RP" & row 
      

  5.   

    加个array,少于k个,加,满了比交。超过的改值。满困难的。
    建议loop k次,选,看你有多少行。
      

  6.   

    呵呵 我语言表达可能不好 
    2的意思是   : 原来选择1个最小数  ,现在要选择K个最小数;;;;而K的值 是根据外部输入的数字来决定的, 我只要把K个最小数 找出来 就可以了
      

  7.   

    是 输入在TEXT里面的
    然后调用的时候
    dim k as integer
    k = val(text1.text)这样 就行了 不用考虑 K>30(只有30个数比较)的情况了
      

  8.   

    Dim min As Single
    Dim i As Integer
    min = Val(MSFlexGrid2.TextMatrix(1, 7))
    For i = 2 To 30
    If Val(MSFlexGrid2.TextMatrix(i, 7)) < min Then
    min = Val(MSFlexGrid2.TextMatrix(i, 7))
    End If
    Next i
    Text5.Text = min
      

  9.   

    没理解错的话,一般来说用下冒泡就可解决你的问题了
    这里你既然问题在于是找最小,似乎可以用找K个中最大的值来解决,在用LP的机器,没VB,下面只是一个不完善的思路:
    '返回k个数中的最大值的row
    function GetMaxRow(arrRow() as long) as long
        dim i as long
        dim row as long
        for i=1 to ubound(arrRow)
            If Val(MSFlexGrid2.TextMatrix(i, 7)) > Val(MSFlexGrid2.TextMatrix(row, 7)) Then 
                row = i 
            End If 
        next
        GetMaxRow=row
    end function'下面是调用代码:
    dim k as long
    dim i as long 
    dim row as longk=val(text1)
    redim arrRow(k-1) as long
    '先初始化数组
    for i=0 to k-1
        arrRow(i)=i+1    '前k行的行号
    next
    '一行行和arrRow中的最大值比较:
    row=GetMaxRow(arrRow)
    for i=30-k to 30
        '如果i行的值小于arrRow中的最大行的值
        If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(row, 7)) Then 
            '用i替换最大行的行号
            arrRow(row) = i
            '重新找GetMaxRow中最大值行号
            row=GetMaxRow(arrRow) 
        End If 
    next
    '输出结果:
    for i=0 to k-1
        debug.? Val(MSFlexGrid2.TextMatrix(arrRow(i), 7));
    next
    debug.?
      

  10.   

    突然想到上面有问题,乱套了:
    '返回k个数中的最大值的row
    function GetMaxRow(arrRow() as long) as long
        dim i as long
        dim row as long
        for i=1 to ubound(arrRow)
            If Val(MSFlexGrid2.TextMatrix(arrRow(i), 7)) > Val(MSFlexGrid2.TextMatrix(arrRow(row), 7)) Then 
                row = i 
            End If 
        next
        GetMaxRow=row
    end function'下面是调用代码:
    dim k as long
    dim i as long 
    dim row as longk=val(text1)
    redim arrRow(k-1) as long
    '先初始化数组
    for i=0 to k-1
        arrRow(i)=i+1    '前k行的行号
    next
    '一行行和arrRow中的最大值比较:
    row=GetMaxRow(arrRow)
    for i=k+1 to 30
        '如果i行的值小于arrRow中的最大行的值
        If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(arrRow(row), 7)) Then 
            '用i替换最大行的行号
            arrRow(row) = i
            '重新找GetMaxRow中最大值行号
            row=GetMaxRow(arrRow) 
        End If 
    next
    '输出结果:
    for i=0 to k-1
        debug.? Val(MSFlexGrid2.TextMatrix(arrRow(i), 7));
    next
    debug.?不行明天上班给你试吧....
      

  11.   

    恩 好人啊
    =========
    For i = 0 To k - 1
    Text2.Text = Val(MSFlexGrid2.TextMatrix(arrRow(i), 7))
    Text3.Text = row
    Next
    ====以上是我最后用的代码 其他代码是按照你给的去写的结果Text2.Text = 最小的一个值
    Text3.Text = 一个莫名其妙的数字
      

  12.   

    工作前赶了一个如上构想的示例,一个窗体+一个FG控件+一个textbox+一个command:Option ExplicitFunction GetMaxRow(arrRow() As Long) As Long
        'arrRow()用来记录k个MSFlexGrid2中最小值的行号
        '函数返回arrRow()中MSFlexGrid2最大值的下标
        Dim i As Long
        Dim row As Long
        For i = 1 To UBound(arrRow)
            If Val(MSFlexGrid2.TextMatrix(arrRow(i), 7)) > Val(MSFlexGrid2.TextMatrix(arrRow(row), 7)) Then
                row = i
            End If
        Next
        GetMaxRow = row
    End FunctionPrivate Sub Command1_Click()    Dim k As Long
        Dim i As Long
        Dim row As Long    k = Val(Text1)              '由text1输入要返回k个最小值
        
        '初始化数组
        ReDim arrRow(k - 1) As Long
        For i = 0 To k - 1
            arrRow(i) = i + 1       '先加入前k行的行号
        Next
        row = GetMaxRow(arrRow)     '找出k行中的最大值下标
        
        '一行行和arrRow中的最大值比较:
        For i = k + 1 To 30
            '如果i行的值小于arrRow中的最大行的值
            If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(arrRow(row), 7)) Then
                '用i替换最大行的行号
                arrRow(row) = i
                '重新找GetMaxRow中最大值行号下标
                row = GetMaxRow(arrRow)
            End If
        Next
        '输出结果:
        For i = 0 To k - 1
            Debug.Print arrRow(i); " = "; Val(MSFlexGrid2.TextMatrix(arrRow(i), 7))
        NextEnd SubPrivate Sub Form_Load()
        
        Dim i As Long, j As Long
        
        Randomize
        With MSFlexGrid2
            .Rows = 31
            .Cols = 8
            For i = 1 To .Rows - 1
                .TextMatrix(i, 0) = i
                For j = 1 To .Cols - 1
                    .ColWidth(j) = 700
                    .TextMatrix(i, j) = Int(Rnd * 50)
                Next j
            Next i
        End With
        Text1.Text = 7
    End Sub
      

  13.   

    Dim row As Integer 
    row = 1 
    For i = 2 To 30 
        If Val(MSFlexGrid2.TextMatrix(i, 7)) < Val(MSFlexGrid2.TextMatrix(row, 7)) Then 
            row = i 
        End If 
    Next i 
    Text5.Text = Val(MSFlexGrid2.TextMatrix(row, 7)) 
    Text10.Text = "RP" & row
      

  14.   

    vbman2003
    ===
    好人啊 谢谢你这么耐心