|
▼TAKA さん:
おはようございます。再送です。
>データが96000個あり、A,C,D列に番号 B,D,E列に数値データが入っています。
>(データは11行目から始まっています)
>1 111 32001 111 64001 111
>2 222 32002 222 64002 123
>3 123 32003 321 64003 223
>* * * * * *
>* * * * * *
>* * * * * *
>
>全範囲の最大値を求めるには、エクセル関数だけで
>MAX(B11:B32010,D11:D32010,E11:E32010)十分なのですが、J1に開始番号、J2に終了番号を入力し、範囲を変更して最大値を求めたいと思っています。
>J1に1、J2に64003を入力しt場合
>MAX(B11:B32010,D11:D32010,E11:E13)を求めたいのです。
>VBAでMAX関数を使ってトライしましたが、範囲を決めるところでエラーが出てあきらめてしまいました。
>初歩的な質問でしたら申し訳ありませんが、どなたか教えてください。
>よろしくお願いします。
セルJ1、J2には正しい数字が入っているとして、
標準モジュールに
'=================================================================
Sub main()
Dim rngaddress As String
rngaddress = get_address(Range("j1").Value, Range("j2").Value)
MsgBox rngaddress
MsgBox Application.Max(Range(rngaddress))
End Sub
'=======================================================================
Function get_address(st As Variant, ed As Variant, Optional strow = 11, Optional edrow As Long = 32010) As String
Dim idx As Long
Dim myarray As Variant
Dim rcnt As Long
Dim r1 As Long, r2 As Long
Dim c1 As Long, c2 As Long
rcnt = edrow - strow + 1
myarray = Array("b", "d", "e")
r1 = (st - 1) \ rcnt
c1 = (st - 1) Mod rcnt
r2 = (ed - 1) \ rcnt
c2 = (ed - 1) Mod rcnt
ReDim addarray(r1 To r2)
For idx = r1 To r2
If LBound(addarray()) = UBound(addarray()) Then
addarray(idx) = myarray(idx) & (strow + c1) & ":" & myarray(idx) & (strow + c2)
Else
Select Case idx
Case LBound(addarray())
addarray(idx) = myarray(idx) & (strow + c1) & ":" & myarray(idx) & edrow
Case UBound(addarray())
addarray(idx) = myarray(idx) & strow & ":" & myarray(idx) & (strow + c2)
Case Else
addarray(idx) = myarray(idx) & strow & ":" & myarray(idx) & edrow
End Select
End If
Next
get_address = Join(addarray(), ",")
End Function
として、mainを実行してみて下さい。
|
|