VBA & WorkSheetFunction.min 調出陣列極小值
- 帖子
- 67
- 主題
- 8
- 精華
- 0
- 積分
- 78
- 點名
- 0
- 作業系統
- Windows XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-15
- 最後登錄
- 2021-9-14
|
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)))
但卻無法適合於大型陣列中.
是否有其他的寫法, 調中一維陣列中, 某一區段的極小值 ?
|
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
2#
發表於 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)) |
|
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
3#
發表於 2012-10-27 08:44
| 只看該作者
Debug.Print WorksheetFunction.Min(Array(ary(2), ary(4)))
目的: 調出 陣列 2~ 4 中, 的最小值
...
alumi 發表於 2012-10-27 00:40 
最直覺的方法...- Dim i, minValue As Integer
- minValue = ary(2)
- For i = 2 To 4
- If ary(i) < minValue Then minValue = ary(i)
- Next i
複製代碼 |
|
|
|
|
|
|
- 帖子
- 67
- 主題
- 8
- 精華
- 0
- 積分
- 78
- 點名
- 0
- 作業系統
- Windows XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-15
- 最後登錄
- 2021-9-14
|
4#
發表於 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) ' 雖然會傳回 陣列中的最小值, 是否 能夠指定 陣列中 "某一區間" 的最小值
感謝您的回覆.
|
|
|
|
|
|
|
- 帖子
- 67
- 主題
- 8
- 精華
- 0
- 積分
- 78
- 點名
- 0
- 作業系統
- Windows XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-15
- 最後登錄
- 2021-9-14
|
5#
發表於 2012-10-27 12:58
| 只看該作者
回復 3# stillfish00
您的直覺方法,沒有問題.
原先是在想,若有現成的函數可以直接拿來用,整個VBA 程式,會看起來比精簡.
|
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
6#
發表於 2012-10-27 17:03
| 只看該作者
回復 5# alumi
自訂函數- Option Explicit
- Sub Ex()
- Dim xi As Integer, Ary(1 To 10) As Integer
- For xi = 1 To 10
- Ary(xi) = Int(100 * Rnd) '亂數
- Next
- MsgBox 區間值("Min", Ary, 5, 10) ' Ary(5):Ary(10) 的區間
- End Sub
- Function 區間值(Max_Or_Min As String, 陣列 As Variant, 區間1 As Integer, 區間2 As Integer) As Long
- Dim xi As Integer, AR()
- ReDim AR(區間1 To 區間2) '複製Ary(5):Ary(10) 的區間的陣列元素數
- For xi = 區間1 To 區間2
- AR(xi) = 陣列(xi)
- Next
- If UCase(Max_Or_Min) = "MAX" Then
- 區間值 = WorksheetFunction.Max(AR)
- Else
- 區間值 = WorksheetFunction.Min(AR)
- End If
- End Function
複製代碼 |
|
|
|
|
|
|
- 帖子
- 67
- 主題
- 8
- 精華
- 0
- 積分
- 78
- 點名
- 0
- 作業系統
- Windows XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-5-15
- 最後登錄
- 2021-9-14
|
7#
發表於 2012-10-27 22:57
| 只看該作者
|
|
|
|
|
|