VBA解法參考如下
Sub Forum()
Dim i As Integer
Dim b_end As Integer
Dim c_start As Integer
---B欄倒數第三個
b_end = Range("B1").End(xlDown).Row - 2
For i = 2 To b_end
If Range("B" & i) = Range("A2") And _
Range("B" & i + 1) = Range("A3") And _
Range("B" & i + 2) = Range("A4") Then
---找C欄空白的地方(要放值的地方)
c_start = Columns("C").Find("").Row
Range("C" & c_start) = Range("B" & i + 3)
End If
Next
End Sub
感謝Neish迅速解答,幫忙非常大!
我直接套用編碼至問題舉例中,執行沒問題,
可以找出所有符合條件的值。
我實際使用會有 42組不同排序的 A欄,每組包含的值數目有 2~500個,
並且要個別在包含 10,000~30,000個值的 42組 B欄中進行比對。
我將直接套用解答的編碼並改寫條件使用,
若有發生問題,再勞各位幫忙,感謝。
不好意思,我的是用函數做的比較笨。
首先增加D欄為輔助欄,在D4儲存格輸入公式「=IF(COUNTIFS(B2,$A$2,B3,$A$3,B4, $A$4)>0,B5,0)」,並將公式複製到D5:D15儲存格。
在C2儲存格輸入公式「=IFERROR(INDEX($B$2:$B$100,(SUMPRODUCT(LARGE(--($D$2:$D$100>=1)*ROW($D$2:$D$100),COUNTIF($D$2:$D$100,">0")-ROW()+2))),0)," ")」,並將公式複製到C3:C15儲存格。
我使用Neish提供的解法,如果B欄超過32,767個值,會遇到"執行階段錯誤 6: 溢位"。
自己 google之後,把 i和 b_end都宣告成 Long資料類型,就可以正常執行了。
以 A欄變數 X1有 6個值,在 B欄變數 D1中比對為例,改寫後編碼如下,若有誤請指正,謝謝。
Sub Forum()
Dim i As Long
Dim b_end As Long
Dim c_start As Integer
'B欄倒數第6個
b_end = Range("B1").End(xlDown).Row - 5
For i = 2 To b_end
If Range("B" & i) = Range("A2") And _
Range("B" & i + 1) = Range("A3") And _
Range("B" & i + 2) = Range("A4") And _
Range("B" & i + 3) = Range("A5") And _
Range("B" & i + 4) = Range("A6") And _
Range("B" & i + 5) = Range("A7") Then
'找C欄空白的地方(要放值的地方)
c_start = Columns("C").Find("").Row
Range("C" & c_start) = Range("B" & i + 6)
End If
Next
End Sub