跨越多个工作表的相同IF语句的macros

我有一个简单的if语句,用于将来自多个(25+)工作表的结果连接到主工作表上的一个单元格中。

如果陈述是

=IF('400'!C23="y",'400'!$C$2,"") 

我目前的方法是把多个IF语句一起打成一个很长的string(见下面),但我宁愿做一个我可以调用的函数(比如说ifconcat()),它使用我的选项卡名称的表列表去通过每个工作表。 谁能帮我这个?

 IF('400'!C23="y",", "&'400'!$C$2,"")&IF('410'!C23="y",", "&'410'!$C$2,"")&IF('420'!C23="y",", "&'420'!$C$2,"") 

目前将返回来自工作表400,410和420的C2中的值。

谢谢你的帮助!

试试下面的UDF。 它从matchVal参数匹配的许多工作表中提取和连接值。 matchCel是要比较的单元格,如果匹配成功, getCel是要连接的单元格。 参数sheetNames是要查找的工作表的可选列表; 如果缺less此参数,则从调用程序工作表以外的所有工作表中提取值。

 Function FetchSheets(matchVal, matchCel As Range, getCel As Range, ParamArray sheetNames()) As String Dim sheetCol As New Collection, sh If UBound(sheetNames) < 0 Then For Each sh In ThisWorkbook.Worksheets If Not sh Is Application.Caller.Parent Then sheetCol.Add sh Next Else For Each sh In sheetNames sheetCol.Add Worksheets(sh) Next End If For Each sh In sheetCol If sh.Range(matchCel.address).Value2 = matchVal Then If Len(FetchSheets) > 0 Then FetchSheets = FetchSheets & ", " FetchSheets = FetchSheets & sh.Range(getCel.address).Value2 End If Next End Function 

要将其应用于您的示例,可以使用以下代码replace公式:

 =FetchSheets("y", C23, $C$2, "400", "410", "420") 

如果您想从除主人以外的所有工作表中取回,请在某个主人单元格中input:

 =FetchSheets("y", C23, $C$2)