2017-04-26 107 views
0

我有以下的Excel表:Excel VBA中篩選一列,然後複製區域集合中的每個項目匹配的行

Create Date   Last Active Date  Age 
4/12/2017 5:54   4/17/2020 8:54  5 Days 
         4/19/2017 7:43  #N/A 
         4/12/2017 20:43  #N/A 
4/1/2017 23:20   4/3/2017 6:54  10 Days 
         4/15/2017 22:20  #N/A 

我想要做的是#N過濾年齡列/ A,然後將每個Last Active Date值複製到Create Date中的同一行。似乎很容易,但我不斷遇到問題。我使用SpecialCells(xlCellTypeVisible)屬性爲那裏的每個Area(非連續行)上的每個區域執行a操作,但是當我去複製行時,它會複製從「創建日期」列的第1行開始的行,這意味着所有的值都會出現重擊或者它會引發錯誤,說明範圍不匹配。這裏是我迄今爲止的代碼,我從另一個頁面中提到了如何做到這一點,但它似乎並不適用於我。

ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=8, Criteria1:= _ 
     "#N/A" 
    Dim lngrow As Long 
    Dim FinalDest As Range 
    Dim Rng As Range 
    lngrow = Sheets("Sheet1").UsedRange.Rows.Count 
    Set FinalDest = Sheets("Sheet1").Range("C2:C" & lngrow) 
    Range("F2:F" & lngrow).Select 

    For Each Rng In Cells.SpecialCells(xlCellTypeVisible).Areas 
     Set FinalDest = FinalDest.Offset(Rng.Rows.Count) 
     Rng.Copy Destination:=FinalDest 
    Next Rng 
    Application.CutCopyMode = False 

我該如何做到這一點?我想通過#N/A對其進行過濾,然後對於每個保留的過濾行,將最後活動日期中的值複製到創建日期(對於這些行將始終爲空),並確保將它們複製到適當的位置行,即如果第3行是第一個被過濾的行,則將該值複製到行3而不是第2行。

+0

嗯...思維在盒子外---我能不能簡單地用#N/A對行進行排序,然後用#N/A過濾它以獲得連續的範圍,然後做一個簡單的複製和粘貼以避免大量額外的工作? – MattE

回答

0

您不需要過濾表格。你有兩個可行的解決辦法:

解決方案1(沒有VBA): 假設創建日期是在A1:

- 插入創建日期和上次活動日期之間的新列。

- 插入此函數B2 - > = IF(A2 = 「」,IFNA(D2,C2),A2)

- 複製膏B2直到你的柱

- 複製的結束所有B列並將它們粘貼爲值。

- 刪除列A

溶液2(與VBA):

可以循環通過每個行,並檢查年齡細胞是#N/A,如果爲真(#N/A ),然後從上次激活日期單元格複製/粘貼到創建日期單元格。

解決方案1更快更簡單。如果您對VBA解決方案感興趣,請告訴我們。

編輯:您可以隨時更改下面的代碼不同的條件,但既然你說 - >創建日期值(這將永遠是空白,這些行):

Dim i As Long 
For i = 2 To Range("C1").End(xlDown).Row 
    If IsEmpty(Cells(i, 1).Value) Then 
     Cells(i, 1) = Cells(i, 2) 
    End If 
Next i 
+0

我相信我在註釋中發佈的方法也是有效的(至少它可以用手工完成,所以我認爲它應該在代碼中給出相同的結果)...它需要是VBA,因爲數據每天都會改變,所以我希望能夠點擊一個按鈕並使之發生... – MattE

+0

我在發佈答案時錯過了您的評論,但您無需過濾或排序任何內容。如果是日常操作,請參閱我對vba解決方案的編輯。 – Tehscript

+0

簡單地通過#N/A對行進行排序來限制行數比循環遍歷所有行更有效嗎?我可以在.value =「#N/A」的地方設置Do While Loop,然後將value2設置爲彼此相等。一旦到達最後一個#N/A行,循環結束 – MattE

相關問題