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

Q: Begin a row from the first non-null value in excel

问题: 我有一个数据 table ,其中包含每年不同参考资料的价格。有些参考资料是 2004 年以来购买的,有些是 2002 年以后购买的...

但是,我想要这样的东西,其中所有价格都从我的示例年份 1 中调用的同一点开始,这是公司购买参考的第一年(所以这是第一个非空值行),第二年是第二年....

主要困难是我不能使用VBA(即使我可以,但我不知道如何使用)而且我必须对超过数千行执行此操作。

我怎样才能使它自动化?

我试图用这个获取每一行的第一个值:

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

但是我不知道如何获取之后的值。

我有东西给你:

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

Select 数据和 运行 应该适合你的宏。

如有任何疑问或问题,请告诉我。

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

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

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

AGGREGATE函数将return这个数组中最小的数字,忽略错误,即第一个填充的列。

然后我们在用 COLUMNS($A:A).

填充时递增它

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