2017-05-11 18 views
1

値の範囲とフィルタの範囲と条件に基づいて値のサブセットを含む範囲を出力するExcel関数を作成しようとしています。 以下の例を使用して、Range( "A2:A5")とRange( "B2:B5")を出力範囲( "C2:C5")に渡したいとします。Excel vba機能:フィルタリング

+ --- + ---- --- + ------- + ------- +

| | | B | C |

+ --- + ------- + ------- + ------- +

| 1 |名前|グループ|出力|

| 2 |ニック| |ニック|

| 3 |マーク| |マーク|

| 4 |マニー| B |運

| 5 |運| |

+ --- + ------- + ------- + ------- +

私がこれまでに以下のコードを書かれています。それは、VBAで正常に動作しますが、私はシート内の関数を呼び出すことはありませ際 D1.function - > = filterFN(A2:A6、B2:B6、D1、 "B")

Sub test() 
    Sheets("Sheet2").Range("D1") = filterFN(Sheets("Sheet2").Range("A1:A6"), Sheets("Sheet2").Range("B1:B6"), Sheets("Sheet2").Range("D1"), "B") 
End Sub 

Function filterFN(valueRange As Range, filterRange As Range, outputRange As Range, criteriaStr As String) 

    Dim Arr1() As Variant ' declare an unallocated array. 
    Dim Arr2() As Variant 
    Dim Arr3(50) As Variant 

    Dim i, j As Integer 

    Arr1 = valueRange 
    Arr2 = filterRange 

    For i = 1 To UBound(Arr1, 1) 
     If Arr2(i, 1) = criteriaStr Then 
      Arr3(j) = Arr1(i, 1) 
      j = j + 1 
     End If 

    Next i 

    [outputRange].Resize(UBound(Arr3)) = Application.Transpose(Arr3) 
    filterFN = Arr3(0) 

End Function 

事前に多くの感謝

答えて

0

あなたは、そのワークシート(または別のシート)を更新するために、ワークシートから呼び出される関数を使用することはできません。あなたが行うことができ、すべての(s)は、呼び出し元のセルに値を返している

http://support.microsoft.com/kb/170787