|
▼tomr25 さん:
2007で少し検証してみました。
65537以上の要素数の配列 → NG
65537以上のセルのValue → NG
65537以上のRangeオブジェクト → OK
という結果でした。
コードで言うと
Sub test()
Dim Ans As Double
Dim tbl(1 To 65537, 1 To 1) As Single
Dim i As Long
Randomize
For i = 1 To UBound(tbl)
tbl(i, 1) = Rnd * 100
Next i
On Error Resume Next
'### 単純に配列で処理
Ans = WorksheetFunction.Max(tbl)
If Err.Number > 0 Then
MsgBox "エラーです"
Err.Clear
Else
MsgBox Ans
End If
'### セルに書きだして処理
With Worksheets("Sheet1").Range("A1").Resize(UBound(tbl))
.Value = tbl
Ans = WorksheetFunction.Max(.Cells)
End With
If Err.Number > 0 Then
MsgBox "エラーです"
Err.Clear
Else
MsgBox Ans
End If
On Error GoTo 0
End Sub
こんな感じ。
一旦セルに書きだしてRangeオブジェクトを範囲としてあげればOKですね。
関数自作なら、MAXは単純にループで作れると思いますし
MODEもDictionaryなんか使えば簡単に作れると思います。
場合によっては最初に変数に入れる段階で答えを作れちゃいますね?
|
|