2016-08-31 9 views
1

これは私の最初の投稿です。できるだけ明確になるように最善を尽くします。Excelワークシート変数ワークシートの範囲を合計する

ここでは正しい解決策としてUDFに整理されていますが、それは主に機能が組み込まれているものを理解できなかったためです。

私のワークブックは、「要約シート」と「{システムテンプレート}」の2枚からなります。要約シートでは、システムのリストを作成します。そのリストから、{システムテンプレート}を使用して新しいワークシートを生成し、リスト内の値に基づいてシートに名前を付けるコードがあります。要約シートのシステム名を含むセルの横にあるセルでは、それぞれのシート上の異なるシステムのそれぞれについて「Q:Q」の範囲内の値を合計しようとしています。変化している範囲の唯一の部分は、データが来るシート名です。これは私が困っているところです。 #Valueエラーが発生し、どこに問題があるのか​​わからない。通常は、組み込みの数式評価ツールを使用しますが、UDFでは無用です。どんな助けでも大歓迎です。

Function FrictionSum(rngInput As Range) 
    Dim rngCell, rngDomain As Range 
    Dim strName As String 
    FrictionSum = 0 

    'FrictionSum = rngInput.Value 
    Set rngDomain = Sheets(strName).Range("Q:Q") 

     For Each rngCell In rngDomain 
      FrictionSum = FrictionSum + rngCell.Value 
     Next rngCell 

End Function 
+2

あなたは 'Function'定義されていますが、あなただけの、' Sub'使用することができます何かを返すされていないか、またはあなたが 'としてそれを定義する必要があり機能FrictionSum(rngInputとしてレンジ)たとえば、「長い間」。また、あなたは 'rngInput'を渡していますが、** UDF **の中では何もしていませんか? –

+0

したがって、式= = SUM(間接( "'"&A1' "!Q:Q")) 'ここでA1はシート名が機能しませんでしたか? –

+1

また、strNameに値を代入しないで、Excelは推測する必要がありますか? –

答えて

0

としては、式を次のように述べています

=SUM(INDIRECT("'" & A1 & "'!Q:Q")) 

は、あなたが欲しいものを行う必要があります。

ワークシート関数の合計は、反復処理を必要とせずに行います。 また、値をstrNameに割り当てることを確認してください。

コード:

Function FrictionSum(rngInput As Range) As Double 
    Dim rngDomain As Range 
    Dim strName As String 


    strName = rngInput.Value 


    Set rngDomain = Sheets(strName).Range("Q:Q") 
    FrictionSum = Application.WorksheetFunction.Sum(rngDomain) 


End Function 
+0

私は最初にSUMを間接的に使用しようとしましたが、何らかの理由でそれは私のために働かないでしょう(おそらく見積もりがありません)。それは今働く。 UDFでは、strNameが割り当てられていない唯一の理由は、トラブルシューティングを行っていたためです。 FrictionSumをrngInput.Valueに割り当て、それが正常に機能したときにコメントアウトしました。strNameを再割り当てしませんでした。ノーリターンについては、For Eachループ内のFrictionSumを戻り値として使用しない理由は何ですか? – Tom

+0

申し訳ありませんが、私はそれを逃した。それは持っているはずです。たぶんカスケードに過ぎず、別のエラーを修正して別のエラーを作成することもできます。しかしこれはより速くなるはずです。 –

関連する問題