2015-12-21 94 views
1

我正在嘗試創建我店鋪銷售的所有產品的數組,但在列表中有大量空白單元格,當矩陣很好時不需要並做了。在構建它之前有沒有辦法擺脫這些空白單元格?構建數組時嘗試跳過空白單元格

對於我的最後一個項目,我做

Range("A:A").Find("").Select 
    Selection.ClearContents 
    Selection.Delete Shift:=xlUp 

,但我不認爲這會爲這個工作,因爲我不想搞砸以任何方式工作。

目前我有這樣的:

Dim iRows as Long 

Sheets("PR001C2531380000001").Activate 
iRows = Cells(Rows.Count, 1).End(xlUp).Row + CLng(0) 

Do While Range("A:A").Find("ITEM-NO").Offset(c + 1, 0) = iRows 
c = c + 1 
Loop 

ReDim PrMat(0 To iRows) 
d = 0 
For d = 0 To UBound(PrMat()) 
Do While Range("A:A").Find("ITEM-NO").Offset(d + 1, 0).End(xlUp).Row + CLng(0) 
PrMat(d) = Range("A:A").Find("ITEM-NO").Offset(d + 1, 0) 
d = d + 1 

我想這是不可能的,但即使是一些驗證,我的想法是關閉的將是巨大的。

+0

你可以選擇數據 - >過濾器,和去選擇要壓縮的列中的空白。該操作不會永久刪除空白條目,並通過選擇全部選擇或清除過濾器來撤消。 – rajah9

+0

在迭代工作簿中的單元的代碼期間,您可以在代碼中檢查單元中是否有數據,然後再將其添加到數組中。 – Steven

+1

爲什麼不添加像If If IsEmpty(Range(「A:A」),Find(「ITEM-NO」)。Offset(d + 1,0)然後......並繼續設置PrMat (d)' – BruceWayne

回答

1

使用相同的技術爲Is it possible to fill an array with row numbers which match a certain criteria without looping?,可以形成非空白的一維數組作爲這樣

`form the array 
x = Filter(Application.Transpose(Application.Evaluate("=IF(LEN(A1:A100)>0,A1:A100,""x"")")), "x", False) 
`return a 1D string 
MsgBox Join(x, ",") 
+0

我將它改爲'PrMat = Filter(Application.Transpose(Application.Evaluate(「= IF(LEN(A:A)> 0,A:A,」「PrMat()」「)」)) ,「PrMat」,假) 但它仍然工作非常好,謝謝! –

+0

@JohnElias很高興能夠幫助:) – brettdj