Excel公式,用于标识列中最新的非空白单元格

时间:2016-05-05 01:54:39

标签: excel

我从电子健康记录中提取了约会时间表,虽然它在Excel中是可读的,但数据无法以简单的方式排序或解释。我已经成功地将大部分数据收集到一个用逗号分隔的字段中(然后我将使用文本到列来分隔)。我现在在两个单独的列中有信息。 A栏 - 提供者姓名和服务日期 B栏 - 所有其他必要信息

问题 - 列a和列b不匹配。例如,A2具有提供者名称和服务日期,但相应的附加细节见b8。也不总是一对一匹配(A列中的条目少于B。

我想要什么 - 我需要在整个列中链接(在上面的例子中)A2到B8等等。如果a列中的每个列中有多个条目,我总是希望列b中最近的非空值与B匹配

我尝试过索引,查找,匹配,但没有任何工作正常。任何帮助我指明正确方向的帮助都会有所帮助。

3 个答案:

答案 0 :(得分:0)

假设列A和B中的数据的顺序相同(意味着A列中的第N个条目是B列中的第N个条目,尽管有空格),并且单元格B2到B7是空白的,它只是声音对我来说,你需要删除空白单元格。

重要提示:在执行任何操作之前,请确保您使用的是数据副本。我不想对你永远失去任何东西负责...

尝试选择整个数据集(A列和A列中的所有内容),然后在Excel 2016中查找并选择>转到特殊(Alt + H,FD,S)。可能在早期版本中类似。

在该屏幕中,有一个选择空白的选项。这样做,然后回到你的工作表上只需删除选定的单元格(ctrl + - )并告诉Excel将剩余的单元格向上移动。 A和A列中的相应数据。 B现在应该在同一行上对齐,对吗?

答案 1 :(得分:0)

根据您的描述并假设您的数据布局为:

    (A)      |    (B)
(1)          |
(2) AAA 111  |
(3)          |
(6)          |  Something
(7) BBB 222  |
(8)          |
(11)         |  Something more
(12) CCC 333 |
(13)         |
(16)         |  Something Else

请注意行号中的跳转

在C2中使用以下内容:

=OFFSET($A$2,(ROW(A2)-2)*5,0,1,1)

并在D2中使用以下

=OFFSET($A$2,(ROW(A2)-2)*5+4,1,1,1)

现在处理0表示当条目为空时你可以将偏移函数包装在if语句

=if(OFFSET($A$2,(ROW(A2)-2)*5+4,1,1,1)=0,"",OFFSET($A$2,(ROW(A2)-2)*5+4,1,1,1))

答案 2 :(得分:0)

假设A列中至少有一个属于B列的条目,您可以使用它来获得非易失性函数:

D1: {=IFERROR(INDEX(A:A,MATCH(SMALL(IF(B$1:INDEX(B:B,MATCH("zzz",B:B))<>"",ROW(B$1:INDEX(B:B,MATCH("zzz",B:B)))),ROW()),IF(A$1:INDEX(A:A,MATCH("zzz",A:A))<>"",ROW(A$1:INDEX(A:A,MATCH("zzz",A:A)))),1)),"")}
E1: {=IFERROR(INDEX(B:B,SMALL(IF(B$1:INDEX(B:B,MATCH("zzz",B:B))<>"",ROW(B$1:INDEX(B:B,MATCH("zzz",B:B)))),ROW())),"")}

为了不多次输入列,只需使用D2:

D2: {=IFERROR(IF(INDEX(A:A,MATCH(SMALL(IF(B$1:INDEX(B:B,MATCH("zzz",B:B))<>"",ROW(B$1:INDEX(B:B,MATCH("zzz",B:B)))),ROW()),IF(A$1:INDEX(A:A,MATCH("zzz",A:A))<>"",ROW(A$1:INDEX(A:A,MATCH("zzz",A:A)))),1))=INDEX(A:A,MATCH(SMALL(IF(B$1:INDEX(B:B,MATCH("zzz",B:B))<>"",ROW(B$1:INDEX(B:B,MATCH("zzz",B:B)))),ROW()-1),IF(A$1:INDEX(A:A,MATCH("zzz",A:A))<>"",ROW(A$1:INDEX(A:A,MATCH("zzz",A:A)))),1)),"",INDEX(A:A,MATCH(SMALL(IF(B$1:INDEX(B:B,MATCH("zzz",B:B))<>"",ROW(B$1:INDEX(B:B,MATCH("zzz",B:B)))),ROW()),IF(A$1:INDEX(A:A,MATCH("zzz",A:A))<>"",ROW(A$1:INDEX(A:A,MATCH("zzz",A:A)))),1))),"")}

但是如上所述:如果A列中的值在B列中没有任何值,那么它将被跳过!

  

这是所有数组公式,将在没有{}的情况下输入,但必须使用 Strl + Shift + 输入确认!< / p>

enter image description here