问:从 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 一个零而不是空白。
问题: 我有一个数据 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 一个零而不是空白。