區域1: Sheets("1").Range("A1:F240"),每行6個數(互不相同),240行
區域2: Sheets("2").Range("A1:F240"),每行6個數(互不相同),240行
要把區域1與區域2對應的行作比較,比如,區域1的第1行的第1個數、第2個...第6個,分別與區域2的第1行所有資料比較,共6*6=36次,如果存在至少4個相等的情況,在Sheets("1").Range("G1")中回傳1,否則為0。
然后再用區域1的第2行與區域2的第2行進行比較,回傳值在G2。
繼續完成其他行的比較。
測驗時我是用randbetween(1,100)在兩個表單中生成亂數,然后把隨機公式粘貼成數字。
以下是以前網友幫寫的,很好用。當時要求區域1中有任意一個數等于區域2中的任意一個數,就回傳為1。而現在的要求是區域1中至少有4個數與區域2中的6個中的4個相等才能回傳1:
Sub t1()
Dim a1, a2, i%, j%, s$
a1 = Sheets("1").Range("A1:F240")
a2 = Sheets("2").Range("A1:F240")
For i = 1 To UBound(a1)
s = "," & Join(Application.Index(a1, i), ",") & ","
For j = 1 To UBound(a1, 2)
If InStr(1, s, "," & a2(i, j) & ",") > 0 Then
Sheets("1").Range("G" & i) = 1
Exit For
End If
Next
If j = 6 Then Sheets("1").Range("G" & i) = 0
Next
End Sub
uj5u.com熱心網友回復:
稍加改動即可:Sub t1()
Dim a1, a2, i%, j%, s$, k&
a1 = Sheets("1").Range("A1:F240")
a2 = Sheets("2").Range("A1:F240")
For i = 1 To UBound(a1)
s = "," & Join(Application.Index(a1, i), ",") & ","
k = 0
For j = 1 To UBound(a1, 2)
If InStr(1, s, "," & a2(i, j) & ",") > 0 Then k = k + 1
Next
Sheets("1").Range("G" & i) = k
Next
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/81882.html
標籤:VBA
