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个数 以及该数所在的行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分 非常感谢
2,你要怎么选 K个?
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 ====
第一个解决了
恩 1 解决了2. 界面里有个TEXT框子,我在TEXT里面输入一个数字(就是K的值),然后 TEXT5.TEXT就显示出 30个数字里面最小的K个数字
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
建议loop k次,选,看你有多少行。
2的意思是 : 原来选择1个最小数 ,现在要选择K个最小数;;;;而K的值 是根据外部输入的数字来决定的, 我只要把K个最小数 找出来 就可以了
然后调用的时候
dim k as integer
k = val(text1.text)这样 就行了 不用考虑 K>30(只有30个数比较)的情况了
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
这里你既然问题在于是找最小,似乎可以用找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.?
'返回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.?不行明天上班给你试吧....
=========
For i = 0 To k - 1
Text2.Text = Val(MSFlexGrid2.TextMatrix(arrRow(i), 7))
Text3.Text = row
Next
====以上是我最后用的代码 其他代码是按照你给的去写的结果Text2.Text = 最小的一个值
Text3.Text = 一个莫名其妙的数字
'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
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
===
好人啊 谢谢你这么耐心