2015-04-28 230 views
2

我在列中粘貼數組,問題是它將列中的某些單元格留空。我如何擦除列中的單元格?刪除數組中的空單元格

這是我有:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Worksheets("Info").Range("A1").Select 
    Dim i As Integer 
    Dim iLastRow As Long 
    iLastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row 
    Dim arrmatrix() As String 

    ReDim arrmatrix(1 To iLastRow, 1 To 1) 
    For i = 1 To iLastRow 
    Range("A2").Cells(i, 1).Select 
    If Selection.Offset(0, 11) = "Pi emitida" Then 
    arrmatrix(i, 1) = Range("A2").Cells(i, 1).Value 
    End If 
    Next i 
    Worksheets("Inicio").Range("G4:G1000000").ClearContents 

    Worksheets("Inicio").Range("G4").Resize(UBound(arrmatrix, 1)).Value =  arrmatrix() 

end sub 
+0

我不清楚你要完成什麼,也不知道爲什麼你需要一個'Worksheet_Change'事件宏。你能否詳細說明你的描述,包括你正在嘗試做什麼以及可能*爲什麼*你想要這樣做? – Jeeped

+0

如果你真的不想要空值,你可以在做arrmatrix(i,1)= Range(「A2」)之前檢查Range(「A2」)。Cells(i,1).Value <>「單元格(i,1)。值。聲明一個新的Long並在每次條件滿足時遞增它以在循環結束時重新運行arrmatrix – scraaappy

回答

0

沒有與您的示例代碼的幾個問題。

  1. 希望這是在信息工作表的代碼表。您不應該嘗試.Activate事件宏中的另一個工作表。
  2. 目前尚不清楚爲什麼您需要在Worksheet_Change事件宏中使用此功能。按原樣,只要工作表中任何地方的值被添加/修改/刪除,就會運行。這聽起來像是矯枉過正,因爲確定結果的唯一兩列是列A和L.
  3. ReDim statement可以與保留一起使用以展開數組,但它只能重新排列最後一個等級。

此修改不依賴於在處理它們之前選擇或激活工作表。 arrmatrix數組根據需要進行擴展,因此您不會在數組中結束空值。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("A:A, L:L")) Is Nothing Then 
     On Error GoTo Fìn 
     Application.EnableEvents = False 
     Dim i As Long, n As Long 
     Dim arrmatrix As Variant 
     ReDim arrmatrix(1 To 1, 1 To 1) 
     For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row 
      If Cells(i, 12).Value = "Pi emitida" Then 
       n = n + 1 
       ReDim Preserve arrmatrix(1 To 1, 1 To n) 
       arrmatrix(1, n) = Cells(i, 1).Value 
      End If 
     Next i 
     With Worksheets("Inicio") 
      .Range("G4:G" & Rows.Count).ClearContents 
      .Range("G4").Resize(UBound(arrmatrix, 2), 1) = Application.Transpose(arrmatrix) 
     End With 
    End If 

Fìn: 
    Application.EnableEvents = True 
End Sub 

這將只在列A或列L中的值被添加/更改/刪除時運行。

因爲我一直在擴展和填充的最後一個級別,我用Application.Transpose重新調整數據之前我塞進它放回INICIO工作。

+0

我不明白你做了什麼,但它的工作原理是完美的。謝謝!!!!! – diego

+0

恐怕我無法理解你添加的條件。 * Pi emitida *進入新的條件以及原始條件,我無法確定最終的等級*和hoy - Cells(j,12).Value> = 0 *因爲在所有其他情況下Cells(j,12 )是文本。如果你編輯你的原始問題以包含這些內容並提供你自己添加這些新的情況,那將是最好的。 – Jeeped

+0

我對我的問題提出了一個新問題,使其更簡單 – diego