一道VBA的题求解 去掉最值的
1.有一组数据 val=(1,4,5,6,10).让我们去掉最大值和最小值以后求平均数, 编一个FUNCTION FNMOYCOR2.val=(15,20,0,-13,34,22)这次去掉为0的数然后求平均数.3.val=(1,0,  ,3,4 5) 这次去掉0和空格的地方 求重新得到的新数据VAL

解决方案 »

  1.   

    用split得到一个数组,再进行处理就可以得到想要的结果了
      

  2.   

    1题:'VBA codeSub a()
        Dim iVal As Variant
        iVal = Array(1, 4, 5, 6, 10)
        MsgBox FNMOYCOR(iVal)End SubFunction FNMOYCOR(arr) As Integer
       Dim mx As Integer, mn As Integer
       mx = WorksheetFunction.Max(arr)
       mn = WorksheetFunction.Min(arr)
       For i = 0 To UBound(arr)
           If arr(i) <> mx And arr(i) <> mn Then
              FNMOYCOR = FNMOYCOR + arr(i)
           End If
       Next
       FNMOYCOR = FNMOYCOR / (UBound(arr) - 1)
       
    End Function
      

  3.   


    Sub a()
        Dim iVal As Variant
        iVal = Array(1, 4, 5, 6, 10)
        MsgBox FNMOYCOR(iVal)End SubFunction FNMOYCOR(arr)
       Dim mx As Integer, mn As Integer
       mx = WorksheetFunction.Max(arr)
       mn = WorksheetFunction.Min(arr)
       For i = 0 To UBound(arr)
           If arr(i) <> mx And arr(i) <> mn Then
              FNMOYCOR = FNMOYCOR + arr(i)
           End If
       Next
       FNMOYCOR = FNMOYCOR / (UBound(arr) - 1)
       
    End Function
      

  4.   

    2
    Sub a()
        Dim iVal As Variant
        iVal = Array(15, 20, 0, -13, 34, 22)
        MsgBox ave(iVal)End SubFunction ave(arr)
       Dim aveM As Integer, i As Integer, j As Integer
       For i = 0 To UBound(arr)
           If arr(i) = 0 Then j = j + 1
           ave = ave + arr(i)
       Next
       ave = ave / (UBound(arr) - j + 1)
    End Function
      

  5.   

    请问第一题你写的
    If arr(i) <> mx And arr(i) <> mn Then
              FNMOYCOR = FNMOYCOR + arr(i)
           End If
    是在干吗? 为什么要加ARR(I),每次这种题,我都不会找这个关系....
    还有第2题的也是
    For i = 0 To UBound(arr)
           If arr(i) = 0 Then j = j + 1
           ave = ave + arr(i)
       Next
    这个我也不太明白. 谢谢
      

  6.   

    还有第一题最后一步FNMOYCOR = FNMOYCOR / (UBound(arr) - 1) 为什么除以ubound(arr)-1啊,怎么能确定最后剩下的个数呢第二题最后ave = ave / (UBound(arr) - j + 1) 也不理解为什么除以UBound(arr) - j + 1) 初学者真是问题多多啊
      

  7.   


    ARR是Function FNMOYCOR的参数啊~就是一个数组~
    然后
    If arr(i) <> mx And arr(i) <> mn Then
      FNMOYCOR = FNMOYCOR + arr(i)
      End If就是把除了最大最小数以外的所有数字加到一起
    至于arr(i) 就是数组里面的数字咯,i是索引撒~
    比如有
    iVal = Array(1, 4, 5, 6, 10)
    iVal(0) = 1 ,  iVal(1) = 4