现在有a,b,c,d,e,f,g,h这几组数,每组数当中都是一些000---999的3位数
当Option1(1)被选择时然后点击Command1,执行
a--h这8组数互相进行俩俩循环比较,如ab,ac,ad,ae,af,ag,ah,bc,bd...............一直到gh,并且要找出每对当中相同的数字,然后在和MSFlexGrid1.TextMatrix(i, 1)里的数字比较然后在MSFlexGrid1.TextMatrix(i, 1)中去掉这些相同的
如a组里有568,437,002,011
b组里有568,368,ab这对有相同的数字568,那么如果MSFlexGrid1.TextMatrix(i, 1)里也有568,那么将在MSFlexGrid1.TextMatrix(i, 1)删除568这行
当Option1(2)被选择时然后点击Command1,执行a--h这8组数互相进行三三循环比较,如abc,abd,abe,abf,abg,abh,bcd,bce,bcf...............一直到fgh,并且要找出每对当中相同的数字,然后在和MSFlexGrid1.TextMatrix(i, 1)里的数字比较然后在MSFlexGrid1.TextMatrix(i, 1)中去掉这些相同的
如a组里有568,437
b组里有568,368
c组里有123,567,345,568,abc这对都有相同的数字568,那么如果MSFlexGrid1.TextMatrix(i, 1)里也有568,那么将在MSFlexGrid1.TextMatrix(i, 1)删除568这行
这个循环该如何写
当Option1(1)被选择时然后点击Command1,执行
a--h这8组数互相进行俩俩循环比较,如ab,ac,ad,ae,af,ag,ah,bc,bd...............一直到gh,并且要找出每对当中相同的数字,然后在和MSFlexGrid1.TextMatrix(i, 1)里的数字比较然后在MSFlexGrid1.TextMatrix(i, 1)中去掉这些相同的
如a组里有568,437,002,011
b组里有568,368,ab这对有相同的数字568,那么如果MSFlexGrid1.TextMatrix(i, 1)里也有568,那么将在MSFlexGrid1.TextMatrix(i, 1)删除568这行
当Option1(2)被选择时然后点击Command1,执行a--h这8组数互相进行三三循环比较,如abc,abd,abe,abf,abg,abh,bcd,bce,bcf...............一直到fgh,并且要找出每对当中相同的数字,然后在和MSFlexGrid1.TextMatrix(i, 1)里的数字比较然后在MSFlexGrid1.TextMatrix(i, 1)中去掉这些相同的
如a组里有568,437
b组里有568,368
c组里有123,567,345,568,abc这对都有相同的数字568,那么如果MSFlexGrid1.TextMatrix(i, 1)里也有568,那么将在MSFlexGrid1.TextMatrix(i, 1)删除568这行
这个循环该如何写
无论是 ab 还是 abc,只要
循环每个 a 中的成员,然后到 b、c 中查找是否存在相同成员,都存在的话就到 MSFlexGrid1 中删除。
Dim Arr, ArrComs
Dim Idx() As Integer'进位(计算数组arr的index组合)
Private Sub Carry(Idx() As Integer, m As Integer, n As Integer)
Dim v As Integer
Dim i As Integer
v = m - n
i = n
Do
Idx(i) = Idx(i) + 1
If Idx(i) > v + i Then
i = i - 1
Else
Exit Do
End If
Loop
Do While i < n
i = i + 1
Idx(i) = Idx(i - 1) + 1
LoopEnd Sub'由index得到数组的组合
Private Sub GetArray(Arr, Idx() As Integer)
Dim i As Integer
For i = 1 To UBound(Idx)
ArrComs(i - 1) = Arr(Idx(i) - 1)
Next
End Sub'各数组之比较,返回共有的值
Private Function GetValue(aComs As Variant) As String
Dim i As Integer, j As Integer
Dim arrTmp
Dim tmpValue
Dim b As Boolean
arrTmp = aComs(0) '第一个数组
For i = 0 To UBound(arrTmp)
'分别取第一个数组的值,和其余数组比较
tmpValue = arrTmp(i)
b = False
j = 1
Do While j <= UBound(aComs)
b = (UBound(Filter(aComs(j), tmpValue)) >= 0)
If Not b Then Exit Do
j = j + 1
Loop
If b Then GetValue = tmpValue
Next
End Function
Private Sub Command1_Click()
Dim m As Integer, n As Integer
Dim i As Integer
Dim s As String
m = UBound(Arr) + 1
n = 2 '2个一组比较,改为3,就是3个一组比较
ReDim Idx(n)
Idx(0) = -1
For i = 1 To n
Idx(i) = i
Next
ReDim ArrComs(n - 1)
Do
'DoEvents
GetArray Arr, Idx '当前组合
s = GetValue(ArrComs)
If s <> "" Then Debug.Print s
Carry Idx, m, n '计算下一个组合
Loop Until Idx(0) = 0
End SubPrivate Sub Form_Load()
a = Array(123, 256, 369)
b = Array(133, 256, 329)
c = Array(423, 786, 319)
d = Array(234, 412, 369)
e = Array(121, 456, 124)
f = Array(678, 256, 123)
g = Array(234, 471, 789)
h = Array(478, 145, 123)
Arr = Array(a, b, c, d, e, f, g, h)
End Sub搜索表格控件自己可以写了吧
Option ExplicitDim a, b, c, d, e, f, g, h
Dim Arr, ArrComs
Dim Idx() As Integer'进位(计算数组arr的index组合)
Private Sub Carry(Idx() As Integer, m As Integer, n As Integer)
Dim v As Integer
Dim i As Integer
v = m - n
i = n
Do
Idx(i) = Idx(i) + 1
If Idx(i) > v + i Then
i = i - 1
Else
Exit Do
End If
Loop
Do While i < n
i = i + 1
Idx(i) = Idx(i - 1) + 1
LoopEnd Sub'由index得到数组的组合
Private Sub GetArray(Arr, Idx() As Integer)
Dim i As Integer
For i = 1 To UBound(Idx)
ArrComs(i - 1) = Arr(Idx(i) - 1)
NextEnd Sub'各数组之比较,返回共有的值
Private Function GetValue(aComs As Variant) As String
Dim i As Integer, j As Integer
Dim arrTmp
Dim tmpValue
Dim b As Boolean
arrTmp = aComs(0) '第一个数组
For i = 0 To UBound(arrTmp)
'分别取第一个数组的值,和其余数组比较
tmpValue = arrTmp(i)
b = False
j = 1
Do While j <= UBound(aComs)
b = (UBound(Filter(aComs(j), tmpValue)) >= 0)
If Not b Then Exit Do
j = j + 1
Loop
If b Then
GetValue = tmpValue
Exit Function
End If
Next
End Function
Private Sub Command1_Click()
Dim m As Integer, n As Integer
Dim i As Integer
Dim s As String
m = UBound(Arr) + 1
n = 2 '2个一组比较,改为3,就是个一组比较
ReDim Idx(n)
Idx(0) = -1
For i = 1 To n
Idx(i) = i
Next
ReDim ArrComs(n - 1)
Do
'DoEvents
GetArray Arr, Idx
s = GetValue(ArrComs)
If s <> "" Then Debug.Print s
Carry Idx, m, n
Loop Until Idx(0) = 0
End SubPrivate Sub Form_Load()
a = Array(123, 256, 369)
b = Array(133, 256, 329)
c = Array(423, 786, 319)
d = Array(234, 412, 369)
e = Array(121, 456, 124)
f = Array(678, 256, 123)
g = Array(234, 471, 789)
h = Array(478, 145, 123)
Arr = Array(a, b, c, d, e, f, g, h)
End Sub
b = Array("133", "256", "329")
c = Array("423", "001", "319")
d = Array("234", "412", "369")
e = Array("121", "456", "124")
f = Array("678", "256", "001")
g = Array("234", "471", "789")
h = Array("478", "145", "123")
Arr = Array(a, b, c, d, e, f, g, h)因为用到filter,如果是数值型,001这样的数据就不准确了....