将用户定义的函数写入Copy&粘贴,然后排序,最后在特定列之后求和

时间:2013-10-30 09:25:46

标签: excel sorting excel-vba user-defined-functions vba

我正在尝试编写一个可以称为Cell公式的自定义函数。它基本上采用源范围,目标范围,排序范围以及数据应该从哪里求和作为输入参数。该函数从源范围复制并粘贴到目标范围内。然后在排序范围的帮助下排序。之后,它应该在指定数量列之后对数据求和,删除剩余数据

      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

感谢任何形式的帮助。

提前谢谢

1 个答案:

答案 0 :(得分:0)

正如Siddarth所说,UDF只能将数据返回到输入的单元格。因此,使UDF工作的唯一方法是更改​​它以返回一个数组,并将其作为多单元数组公式输入目标范围。
请参阅http://fastexcel.wordpress.com/2011/06/20/writing-efiicient-vba-udfs-part5-udf-array-formulas-go-faster/以获取创建多个数组的示例单元格阵列UDF。通过选择单元格的目标范围,在公式栏中输入公式并按Ctrl / Shift / Enter输入多单元格数组公式。