查找范围中的第一个非空白单元格

我正在处理一行数据列表中的一个或多个单元格可以为空。

比方说列表是单元格A1A2A3A4 。 我正在尝试创build一个将执行以下操作的函数:

 IF A1 has a value I want the cell to return A1. IF A1 is empty then I want it to return A2. IF A1 and A2 are both empty I want it to return A3. If A1, A2 and A3 are all empty I want it to return A4. 

谷歌的第一个结果: http : //chandoo.org/wp/2014/01/15/find-first-non-blank-item-in-a-list-excel-formulas/

此公式返回范围B1:B100的第一个TEXT单元格:

=VLOOKUP("*", B1:B100, 1,FALSE)

*是Excel中的通配符。 当你问VLOOKUPfind*时,它会find包含任何东西的第一个单元格。

注意 :此方法查找包含任何文本的第一个单元格。 因此,如果第一个非空白单元格是一个数字(或date,%或布尔值),公式会显示包含文本的下一个单元格。

如果你需要find非空白的 URL给出以下解决scheme:

如果要查找第一个非空值,无论是文本还是数字,那么可以使用下面的数组公式。

=INDEX(B3:B100, MATCH(FALSE, ISBLANK(B1:B100), 0))

确保在input此公式后按下CTRL + Shift + Enter

这个公式如何工作?

  • ISBLANK(B1:B100)部分:根据B1:B100的98个单元,给出了TRUE / FALSE值的列表B1:B100是否为空。 它看起来像这样: {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE; ...} {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE; ...}

  • MATCH(FALSE, ISBLANK(…), 0)部分:一旦我们有了TRUE / FALSE值,我们只需要find第一个FALSE值(即第一个非空白单元格)。 这是MATCHfunction所做的。 它在列表中findFALSE值的精确匹配。

  • INDEX(B1:B100, MATCH(…))部分:一旦我们知道哪个单元格是第一个非空白单元格,就需要它的值。 这就是INDEX所做的。

正如你对你的问题的评论所指出的,你有500行散布空白单元格。 您想要用最后一个非空白单元格的值填充空白单元格。

我会写一些VBA代码,它的工作原理如下:select您想要回填的单元格区域并运行这个VBA:

 Sub fillBlanks() For Each c In Selection.Cells If c.Value <> "" Then lastVal = c.Value Else c.Value = lastVal End If Next c End Sub 

基本上,如果单元格为空,则使用最后一个非空白单元格的值(如果上面没有空白单元格,它将保持空白)。 否则,如果单元格不是空的,请将其保存为最后一个非空单元格。 对所选范围内的每个单元格重复一次。

关于使用此vba代码的分步说明 – 对于此示例工作表:

示例工作表

确保select范围,按ALT + F11

这应该打开Visual Basic编辑器:

Visual Basic编辑器

F7 ,这应该调出activesheet的代码。 粘贴上面的VB代码:

添加代码

F5 (或使用菜单运行代码)。

运行代码

最终结果如下:

结果

您只需在列旁边的列中inputrank.eq公式,然后执行rank.eq即可将所有数据置顶。 这将使您的所有数据达到顶峰。

例如,在下面的图片中,我使用百分比进行排名,我想将带有数据的单元格放到顶部以供展示,我将隐藏除了我的vlookups以外的所有列。

电子表格的屏幕截图