プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
VBAの最大値の求め方の質問です。

期待利益3、4.5、3.5の順番で範囲cells(30~32,''G'')の中から最大値を求めなくてはいけなくて、求めた最大値をcells(33,''G'')に入れたいです。

Dim maxx as integer,x as integer
maxx = 0
For x = 1 To 3
If maxx < Cells(30, "G") Then 'これが3.0
maxx = Cells(30, "G")
ElseIf maxx < Cells(31, "G") Then 'これが4.5
maxx = Cells(31, "G")
Else  'これが3.5
maxx = Cells(32, "G")
End If
Cells(33, "G") = maxx
Next x

最初にある
maxx = 0
For x = 1 To 3
If maxx < Cells(30, "G") Then
maxx = Cells(30, "G")
この部分で既にmaxxが0より大きいのでelseif以降が機能しないのは分かっています。
どう書き直せば3つの数字の中から比較できるか知りたいです。
よろしくお願いします。

「vba 最大値 条件分岐」の質問画像

A 回答 (4件)

単純に最大値を求めるだけですか?


関数使わなければ、
1.一つ目をMAXに代入
2.IF MAX<二つ目なら二つ目をMAXに代入
3.IF MAX<三つ目なら三つ目をMAXに代入だけでいいのでは?
ELSE要りません。
FOR NEXTも要らないですね。
    • good
    • 0

以下のようにしてください。


①最初にmmaxに0をいれてあります。
②30行から32行まで、以下を繰り返します。
G列の期待利益がmmaxより大きいならその値をmmaxに設定します。
③結果的にmmaxに最も大きい値が設定されます。
それを33行目のG列に設定します。

尚、mmaxの型をintegerにすると-32768~32767の整数しか扱えません。
小数点以下も扱いたいならVariant型かDouble型にすべきです。
xの型はintegerでも構いませんが、扱える範囲がせまいです。Long型を使用すると約10桁の整数まで扱えるので、Long型を使用したほうが便利です。
PCにメモリが少なかった大昔は、メモリの節約のためにinteger型を使用していましたが、今はその必要はありません。
-----------------------------------------------
Dim maxx As Variant
Dim x As Long
maxx = 0
For x = 30 To 32
If maxx < Cells(x, "G") Then
maxx = Cells(x, "G")
End If
Next x
Cells(33, "G") = maxx
    • good
    • 0
この回答へのお礼

助かりました

解決しました…!!
たしかにintegerでは無かったですね笑
助かりました、本当にありがとうございます!!

お礼日時:2022/12/10 11:12

こんにちは



Range("G33").Value = Application.Max(Range("G30:G32"))

とかではいかがでしょうか?
    • good
    • 2

手書きなので違うかも?



maxx = worksheetfunction.max(Cells(30, "G") ,Cells(31, "G") ,Cells(32, "G"))
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!