2017-02-05 1 views
2

私がしようとしているのは、選択範囲内のすべての要素に自分自身のfunctionDigitを適用し、それらを合計することです。配列関数でExcel:多くの要素にユーザー定義関数を適用して合計する方法

、あなたは選択の平方根のすべてを合計するには

{=SUM(SQRT(A2:A10))} 

のようなものを行うことができます。私がしたいのは、効果的にSQRTを私自身の機能に置き換えることです。具体的には、私はその下の1を掛け、各要素に対してonlyDigitsを行い、その後、1つのセルの最後の合計を表す合計に追加します

{=SUM(PRODUCT(onlyDigits(A2:A10), B2:B10))} 

のようなものを持ってできるようにしたいです。

私の関数のDiggitsは、入力(セル)を取り込み、数値だけを取得するので、数値入力を受け取るだけでなく、私はここにいます。ここにソースがあり、別の質問からコピーしました:

Function onlyDigits(s As String) As String 
    ' Variables needed (remember to use "option explicit"). ' 
    Dim retval As String ' This is the return string.  ' 
    Dim i As Integer  ' Counter for character position. ' 

    ' Initialise return string to empty      ' 
    retval = "" 

    ' For every character in input string, copy digits to  ' 
    ' return string.          ' 
    For i = 1 To Len(s) 
     If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then 
      retval = retval + Mid(s, i, 1) 
     End If 
    Next 

    ' Then return the return string.       ' 
    onlyDigits = retval 
End Function 

これは可能ですか?もしそうなら、どうしたらいいですか?本当にありがとう!あなたは、配列を返す必要が

+1

私はなぜあなたの関数は 'STRING'たようで、理解してわかりませんか?あなたは何らかの数値を返すと思いませんか? 「ロング」または「ダブル」であってはなりませんか? –

+0

「数値入力だけでなく」とはどういう意味ですか?より多くの情報を提供できますか?ワークシート内のデータのサンプルと、この「関数」がどのように適用されているかのようです。また、期待される結果は何ですか? –

答えて

4

Function onlyDigits(s As Range) As Variant() 
    ' Variables needed (remember to use "option explicit"). ' 
    Dim retval() As Variant ' This is the return string.  ' 
    Dim i As Integer  ' Counter for character position. ' 

    ' Initialise return string to empty      ' 
    ReDim retval(1 To s.Cells.Count) 

    ' For every character in input string, copy digits to  ' 
    ' return string. 
    For j = 1 To s.Cells.Count ' 
     For i = 1 To Len(s(j)) 
      If IsNumeric(Mid(s(j), i, 1)) Then 
       retval(j) = retval(j) + Mid(s(j), i, 1) 
      End If 
     Next i 
     retval(j) = CLng(retval(j)) 
    Next j 

    ' Then return the return string.       ' 
    onlyDigits = retval 

End Function 

配列が返さは、あなたがそれを移調する必要があるので、水平である:

=SUMPRODUCT(TRANSPOSE(onlyDigits(A1:A5)),B1:B5) 

それが配列ではCtrl-Shiftキーを押しながらEnterで入力する必要があります。

enter image description here

+0

素敵な説明 –

関連する問題