跳轉滿足條件的資料

熬肥妖發表於2024-04-01

問題:根據總表中指定條件,跳轉到分表中的指定資料。

子表只有一個“資料表1”:

=IF(COUNTIFS(資料表1!A:A,A2),HYPERLINK("#資料表1!a"&MIN(IF(A2=資料表1!A$2:A$7,ROW($2:$7)))&":d"&MAX(IF(A2=資料表1!A$2:A$7,ROW($2:$7))),A2),"") 

藉助Let函式公式可以簡化如下:

=LET(a,IF(A2=資料表1!A$2:A$7,ROW($2:$7)),IF(COUNTIFS(資料表1!A:A,A2),HYPERLINK("#資料表1!a"&MIN(a)&":d"&MAX(a),A2),""))

IF(A2=資料表1!A$2:A$7,ROW($2:$7)):如果資料表1中A列資料等於A2時,返回對應行號。

"#資料表1!a"&MIN(a)&":d"&MAX(a):生成需要引用資料的單元格地址,如a的結果為2、3、4、False、False,單元格地址為“#資料表1A2:D4”

使用Hyperlink實現超連結

如果A2在資料表1的A列中不存在,返回空文字。

子表有若干個,如資料表1、資料表2:

=IF(SUM(COUNTIF(INDIRECT({"資料表1","資料表2"}&"!a:a"),A2)),HYPERLINK("#"&CONCAT(UNIQUE(IF(VSTACK(資料表1:資料表2!A$2:A$6)=A2,CHOOSE(INT(ROW($5:$14)/5),"資料表1","資料表2"),"")))&"!a"&MIN(IF(VSTACK(資料表1:資料表2!A$2:A$6)=A2,MOD(ROW($5:$14),5)+2))&":d"&MAX(IF(VSTACK(資料表1:資料表2!A$2:A$6)=A2,MOD(ROW($5:$14),5)+2)),A2),"")

藉助Let函式公式可以簡化如下:

=LET(a,VSTACK(資料表1:資料表2!A$2:A$6)=A5,b,IF(a,MOD(ROW($5:$14),5)+2),IF(SUM(COUNTIF(INDIRECT({"資料表1","資料表2"}&"!a:a"),A5)),HYPERLINK("#"&CONCAT(UNIQUE(IF(a,CHOOSE(INT(ROW($5:$14)/5),"資料表1","資料表2"),"")))&"!a"&MIN(IF(a,MOD(ROW($5:$14),5)+2))&":d"&MAX(IF(a,MOD(ROW($5:$14),5)+2)),A5),""))

CountIf部分需要引用所有工作簿的A列,計算出A2在各子表中的個數

Vstack用於將所有子表的A列堆疊成一列

Vstack的結果中如果存在A2,所返回的行號是一個迴圈序列數,本示例中Vstack每個工作表引用5行,此迴圈值就是5,這一結果作為Hyperlink需要跳轉的單元格地址的行數

Vstack的結果中如果存在A2,則返回一個重複序列數,本示例中Vstack每個工作表引用5行,此重複次數為5,這一結果作為Choose函式的第一引數,用以提取工作表名

Choose函式第二個引數起,需要列出所有工作表名

其他思路同上

所以,為什麼不在一開始就把所有相同結構的表合併在一個工作表內?

相關文章