0
工作表「FRT」包含過濾的數據。對於列A中的每個字母,僅當列B與「B2」中的單元格值匹配時,我將C列中的相應值附加到對應的數組中。 A列可以包含字母(A-S)的任何組合或不包含任何字母。我的代碼只適用於列A中存在所有字母的情況,但是,如果它們中的任何一個都丟失,我會收到一條錯誤消息。另外,我的代碼非常冗長。請建議如何改進它。
中,我有 「A」 至 「C」 唯一代碼:循環過濾列表並將元素附加到數組
Sub test()
Dim acat As Variant, cell As Range
Dim bcat As Variant
Dim ccat As Variant
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("FRT")
LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ReDim fcat(0)
ReDim bcat(0)
ReDim ccat(0)
For Each cell In Worksheets("FRT").Range("A6:C" & LastRow).SpecialCells(xlCellTypeVisible)
If cell.Value = "A" And cell.Offset(0, 1).Value = Range("B2").Cells Then
MsgBox (Range("B2").Cells)
acat(UBound(acat)) = cell.Offset(0, 2).Value
ReDim Preserve acat(UBound(acat) + 1)
ElseIf cell.Value = "B" And cell.Offset(0, 1).Value = Range("B2").Cells Then
bcat(UBound(bcat)) = cell.Offset(0, 2).Value
ReDim Preserve bcat(UBound(bcat) + 1)
ElseIf cell.Value = "C" And cell.Offset(0, 1).Value = Range("B2").Cells Then
ccat(UBound(ccat)) = cell.Offset(0, 2).Value
ReDim Preserve ccat(UBound(ccat) + 1)
End If
Next cell
ReDim Preserve acat(UBound(fcat) - 1)
ReDim Preserve bcat(UBound(bcat) - 1)
ReDim Preserve ccat(UBound(ccat) - 1)
Range("D1") = Join(acat, " ")
Range("E1") = Join(bcat, " ")
Range("F1") = Join(ccat, " ")
End Sub
這是視覺數據的
謝謝
有幾個問題:1)當你所有的If語句擔心的是A中的條件爲真時,是否有一個理由通過B和C列迭代? 2)失敗時,線路故障? –
我還需要檢查B列中的對應值是否與「B2」中的值匹配。我將數值存儲在列C中的數組中。我試圖避免兩天前你幫助我的高級過濾步驟。如果我得到這個工作,這將會給我我正在尋找的東西。 – user3781528
你可以用單元格的偏移量來做到這一點。你只需要遍歷A列並像你一樣使用偏移量。 For each循環將從if語句的「A6」開始,如果因爲它等於「A」,那麼它將捕獲到第一個循環,然後執行這些操作。下一個循環單元格將是「B6」,並且if語句都不會觸發,然後它將移動到「C6」,並且再次都不會觸發。沒有必要額外的循環。用你擁有的邏輯,它仍然可以工作。它會加快速度。 –