问:从excel中的第一个非空值开始

时间:2019-11-12 10:25:16

标签: excel excel-2016

问题: 我有一个数据表,每年列出不同参考的价格。自2004年以来购买了一些参考文献,自2002年以来购买了其他参考文献...

enter image description here

但是,我想要这样的事情,即所有价格均始于我的示例第1年中调用的同一点,即公司购买参考的第一年(因此这是该行中的第一个非空值) ,第二年是第二年。...

[What I want

主要的困难是我不能使用VBA(即使可以,但我不知道如何使用),而且我必须这样做超过数千行。

我如何做到这一点的自动化?

我试图以此来获取每行的第一个值:

=INDEX(A2:V2;MATCH(TRUE;A2:V2<>"";0)) 

但是我不知道如何获得值。

2 个答案:

答案 0 :(得分:1)

我为您准备了一些东西

Sub Delete_blanks()
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlToLeft
End Sub

选择数据并运行对您有用的宏。

任何问题或疑问都会让我知道。

答案 1 :(得分:0)

根据您的要求,我认为这样会更容易(就找到“下一个”列而言,找到第一个填充的列号而不是第一个值。然后可以增加该值。

=IF(INDEX(2:2,AGGREGATE(15,6,1/ISNUMBER(2:2)*COLUMN(2:2),1)-1+COLUMNS($A:A))="","",INDEX(2:2,AGGREGATE(15,6,1/ISNUMBER(2:2)*COLUMN(2:2),1)-1+COLUMNS($A:A)))

要查找包含数字的第一列编号(我假设第一列是文本,否则,可能需要进行一些更改):

1/ISNUMBER(2:2)*COLUMN(2:2),1)-1+COLUMNS($A:A)

将返回{DIV/0!, n, …}的数组,其中n是其中单元格包含数字的列号

AGGREGATE函数将返回此数组中最小的数字,而忽略错误,这是第一填充的列。

然后在我们用COLUMNS($A:A)填充时将其递增。

我们需要IF语句,因为当INDEX找到一个空单元格时,它将返回一个零而不是一个空白。

enter image description here