创build一个新的列表并从现有列表中删除空单元格

我有以下Excel电子表格:

ABCD 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 

列A列B中列出了其销售的不同产品。 正如您所看到的,可能会发生列表之间存在空单元格。

列C列D我想现在实现空白单元格被删除和产品列表显示没有空单元格。

你知道一个可以做到这一点的公式吗?

在C1中,复制一列,两者都适合:

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

(进入CSE)…然后耐心等待。

 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 

C1中input数组公式:

 =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中input数组公式:

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

并向下复制:

在这里输入图像说明

数组公式必须使用Ctrl + Shift + Enterinput,而不仅仅是Enter键。

无论是通过数组公式(使用CSE)还是像AGGREGATE这样的数组处理函数,都需要某种forms的循环处理。 您可以通过几种方法来最小化计算周期。

  1. 你将只想用数据引用单元格; 全列参考将通过引用不必要的空白单元格来减慢计算速度。
  2. IF语句不会处理FALSE语句部分。 检查以确定上面的单元格是否为零长度的string,并且只计算公式的循环部分并不意味着您将只处理超过绝对必要的一行。

     =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(,)) 

向右下方填充。

在这里输入图像说明