2017-06-26 73 views
1

創建一個新的列表,並消除空白單元格,我有以下Excel電子表格:從現有列表

  A   B   C   D 
1 Product A  500  Product A  500 
2 Product B  300  Product B  300 
3 Product C  400  Product C  400 
4        Product D  600 
5        Product E  550 
6 Product D  600  Product F  200 
7 Product E  550  Product G  800 
8 
9 Product F  200 
10 Product G  800 

列AB柱與他們的銷售不同的產品上市。 正如您所看到的,可能會發生列表之間存在空單元格。

C欄列d現在我要實現的是,空單元格將被刪除,該產品的列表,而無需空單元被示出。

你知道一個可以做到這一點的公式嗎?

+3

爲什麼不排序的列,將所有的空單元格推到列表的底部,有效地刪除它們。 –

+0

這是一個好主意,但這個列表不會始終保持不變。該列表將每週填充新的數據,因此用戶總是必須進行不太友好的新分類。因此,我寧願選擇自動完成工作的解決方案。 – Michi

+2

然後根據你的列表大小,你會希望vba複製粘貼數據然後排序。一個公式將是一個數組公式,根據數據量,它會在重新計算時消耗大量內存。 –

回答

1

在C1,橫跨一列,都抄下來,以適應:

=INDEX(A:A,SMALL(IF(ISBLANK(A:A),"",ROW(A:A)-MIN(ROW(A:A))+1),ROW(A1))) 

(進入CSE)......然後耐心等待。

+0

不錯! *(可能想把它包裝在IFERROR中)* –

+0

@ Gary的學生至少'#NUM!'是一種警告,不要再拖下去。 – pnuts

+0

我把這個放在我的個人工具箱中。 –

0
Sub deleteblanks() 
Dim lastrow As Integer 
Dim sht As Worksheet 

Set sht = ThisWorkbook.Worksheets("Sheet1") 
lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 

With Range("A1:B" & lastrow) 
     .Value = .Value 
     On Error Resume Next 
     .SpecialCells(xlCellTypeBlanks).Delete xlShiftUp 
     On Error GoTo 0 
End With 

End Sub 
0

C1輸入數組公式:

=IFERROR(INDEX($A$1:$A$20,SMALL((IF(LEN($A$1:$A$20),ROW(INDIRECT("1:"&ROWS($A$1:$A$20))))),ROW(A1)),1),"") 

D1輸入數組公式:

=IFERROR(INDEX($B$1:$B$20,SMALL((IF(LEN($B$1:$B$20),ROW(INDIRECT("1:"&ROWS($B$1:$B$20))))),ROW(B1)),1),"") 

和複製向下:

enter image description here

數組公式必須按Ctrl +輸入 + 輸入,而不僅僅是輸入鍵。

0

無論是通過數組公式(帶CSE)還是像AGGREGATE這樣的數組處理函數,您都需要某種形式的循環處理。您可以通過幾種方法來最小化計算週期。

  1. 你將只想引用帶有數據的單元;通過引用不必要的空白單元格,完整的列引用將減慢計算的速度。
  2. IF語句不會處理FALSE語句部分。檢查以確定上述單元格是否爲零長度字符串,並且只計算公式的循環部分並不意味着您將只處理超過絕對必要的一行。

    =IF(SIGN(LEN(D1)), IFERROR(INDEX(A:A, AGGREGATE(15, 6, ROW(A$2:INDEX(A:A, MATCH(1E+99, $B:$B)))/(SIGN(LEN(A$2:INDEX(A:A, MATCH(1E+99, $B:$B))))), ROW(1:1))), TEXT(,)), TEXT(,)) 
    

填寫向右和向下。

enter image description here