Board logo

標題: VBA & WorkSheetFunction.min 調出陣列極小值 [打印本頁]

作者: alumi    時間: 2012-10-27 00:40     標題: VBA & WorkSheetFunction.min 調出陣列極小值

Dim ary(1 To 4) As Integer
    ary(1) = 10
    ary(2) = 15
    ary(3) = 9
    ary(4) = 11
   
    Debug.Print WorksheetFunction.Min(Array(ary(2), ary(4)))
   目的: 調出 陣列 2~ 4 中, 的最小值
    上面是錯誤的程式碼,  只是回傳 11 , 而非 正確值 9
    程式碼雖然可以改成 Debug.Print WorksheetFunction.Min(Array(ary(2), ary(3), ary(4)))
    但卻無法適合於大型陣列中.
    是否有其他的寫法, 調中一維陣列中, 某一區段的極小值 ?

作者: GBKEE    時間: 2012-10-27 07:05

回復 1# alumi
上面是錯誤的程式碼,  只是回傳 11 , 而非 正確值 9
沒有錯啊 !
Debug.Print WorksheetFunction.Min(Array(ary(2), ary(4)))
ary(2)=15   ary(4)=11   那有 9.
試試  Debug.Print WorksheetFunction.Min(ary))
作者: stillfish00    時間: 2012-10-27 08:44

Debug.Print WorksheetFunction.Min(Array(ary(2), ary(4)))
   目的: 調出 陣列 2~ 4 中, 的最小值   
...
alumi 發表於 2012-10-27 00:40

最直覺的方法...
  1.     Dim i, minValue As Integer
  2.     minValue = ary(2)
  3.     For i = 2 To 4
  4.         If ary(i) < minValue Then minValue = ary(i)
  5.     Next i
複製代碼

作者: alumi    時間: 2012-10-27 12:54

回復  alumi
上面是錯誤的程式碼,  只是回傳 11 , 而非 正確值 9
沒有錯啊 !
Debug.Print WorksheetFu ...
GBKEE 發表於 2012-10-27 07:05


    其實您說的沒錯.
    只是單純地想把 一些 Excel 功能, 直接 套入 VBA 來使用.
   例如:   
   debug.print WorkSheetFunction.Min(range(cells(5,"A") , cells(100, "A")))     ' 傳回 Cells (5 ~ 100 ,"A") 的最小值
   debug.print WorkSheetFunction.Min(ary) ' 雖然會傳回 陣列中的最小值, 是否 能夠指定 陣列中 "某一區間" 的最小值

   感謝您的回覆.

作者: alumi    時間: 2012-10-27 12:58

回復 3# stillfish00


    您的直覺方法,沒有問題.
 原先是在想,若有現成的函數可以直接拿來用,整個VBA 程式,會看起來比精簡.

作者: GBKEE    時間: 2012-10-27 17:03

回復 5# alumi
自訂函數
  1. Option Explicit
  2. Sub Ex()
  3.     Dim xi As Integer, Ary(1 To 10) As Integer
  4.     For xi = 1 To 10
  5.         Ary(xi) = Int(100 * Rnd)       '亂數  
  6.     Next
  7.     MsgBox 區間值("Min", Ary, 5, 10)  ' Ary(5):Ary(10) 的區間
  8. End Sub
  9. Function 區間值(Max_Or_Min As String, 陣列 As Variant, 區間1 As Integer, 區間2 As Integer) As Long
  10.    Dim xi As Integer, AR()
  11.    ReDim AR(區間1 To 區間2)      '複製Ary(5):Ary(10) 的區間的陣列元素數
  12.    For xi = 區間1 To 區間2
  13.         AR(xi) = 陣列(xi)
  14.     Next
  15.     If UCase(Max_Or_Min) = "MAX" Then
  16.         區間值 = WorksheetFunction.Max(AR)
  17.     Else
  18.         區間值 = WorksheetFunction.Min(AR)
  19.     End If
  20. End Function
複製代碼

作者: alumi    時間: 2012-10-27 22:57

回復 6# GBKEE

     感謝您花時間回覆,感恩∼




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)