2017-03-24 17 views
1

私は複数の(25+)からの結果を連結するために使用したい場合は、簡単な文を持っていれば、同一のためのマクロ。マスターワークシート上の一つのセルにワークシート複数のワークシート間の文

文が

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

であれば私の現在の方法は、IF文本当に長い文字列に合わせて、複数のbashにある(下記参照)が、私はむしろ機能を作ると思います(たとえば、ifconcat())Iは、各ワークシートを通過するために、タブ名のテーブルリストを使用して呼び出すことができます。誰もこれで私を助けることができますか?

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の値を返します!

答えて

1

次のUDFをお試しください。 matchValパラメータが一致する多くのワークシートの値を取り出して連結します。 matchCelは比較対象のセルであり、一致した場合に連結するセルはgetCelです。パラメータsheetNamesは、参照するワークシートのオプションのリストです。このパラメーターがない場合、呼び出し側ワークシートを除くすべてのワークシートから値がフェッチされます。

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 

あなたの例にそれを適用するには、あなたはこれであなたの式を置き換えることができます:あなたがマスター以外のすべてのシートから取得したい場合は、いくつかのマスターセルでこれを入力する

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

素晴らしいです
=FetchSheets("y", C23, $C$2) 
+1

!作品は完璧です:)ありがとう! – NC00123

関連する問題