0

セル式として呼び出すことができるカスタム関数を作成しようとしています。基本的に、ソース範囲、ターゲット範囲、ソート範囲、およびデータを合計する場所を入力引数として取ります。関数はソース範囲からコピーし、ターゲット範囲に貼り付けます。次に、ソート範囲を使用してソートします。その後、指定された数の列の後にデータを合計し、残りのデータを削除する必要があります

      Function Sort_Column(MaCol As String, SortCol As String, TarCol As String, x As Long)
        Dim OneRange As Range
        Dim Ws As Worksheet`enter code here`
          Set Ws = Workbooks("test4.xlsm").Worksheets("Sheet1")
             Ws.Range(MaCol & "," & SortCol).Copy
             Ws.Range(TarCol).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


          Set OneRange = Ws.Range(TarCol)
              TarColNa = Right(TarCol, 1)
              TarColRa = Right(TarCol, 1) & "2"
                 Set acell = Ws.Range(TarColRa)
              OneRange.Sort Key1:=acell, Order1:=xlDescending, Header:=xlYes

              TarCell = Range(TarColNa & 1).Column
              LastRow = Cells(Rows.Count, TarCell).End(xlUp).Row

            Y = x + 1
           SumCol = "=SUM(" & TarColNa & Y & ":" & TarColNa & LastRow & ")"
           Range(TarColNa & Y) = SumCol
           Range(Left(TarCol, 1) & Y) = " All Other"
           Range(Left(TarCol, 1) & Y + 1 & ":" & Left(TarCol, 1) & LastRow).ClearContents
           Range(TarColNa & Y + 1 & ":" & TarColNa & LastRow).ClearContents

           Range(Left(TarCol, 1) & "2").Select

     End Function

残念ながら、上記のユーザー定義関数をセル数式として試行すると #VALUE が返されます

どんな種類の助けも大歓迎です。

前もって感謝します

4

1 に答える 1

0

Siddarth が言うように、UDF は入力されたセルにのみデータを返すことができます。したがって、UDF を機能させる唯一の方法は、配列を返すように変更し、それを複数セル配列数式としてターゲット範囲に入力することです。マルチセル配列 UDF の作成例については、http://fastexcel.wordpress.com/2011/06/20/writing-efiicient-vba-udfs-part5-udf-array-formulas-go-faster/
を参照してください。マルチセル配列数式を入力するには、対象のセル範囲を選択し、数式バーに数式を入力して、Ctrl/Shift/Enter キーを押します。

于 2013-10-30T13:02:31.227 に答える