问题: 我有一个数据表,每年列出不同参考的价格。自2004年以来购买了一些参考文献,自2002年以来购买了其他参考文献...
但是,我想要这样的事情,即所有价格均始于我的示例第1年中调用的同一点,即公司购买参考的第一年(因此这是该行中的第一个非空值) ,第二年是第二年。...
主要的困难是我不能使用VBA(即使可以,但我不知道如何使用),而且我必须这样做超过数千行。
我如何做到这一点的自动化?
我试图以此来获取每行的第一个值:
=INDEX(A2:V2;MATCH(TRUE;A2:V2<>"";0))
但是我不知道如何获得值。
答案 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
找到一个空单元格时,它将返回一个零而不是一个空白。