• ベストアンサー

2つ以上の変数を比較して最大数を求めたい

Sub 最大数() Dim a As Long Dim b As Long Dim c As Long a = 10 b = 20 c = 30 ここで変数を比較するコード MsgBox "a,b,cの中で一番大きな数は です" End Sub のように変数を比較して、最大数を求めたいのです。 2つなら If a > b Then で結果を取得すればいいですが、 3つや4つやそれ以上になった時に、応用を利かせるため質問しました。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Azzz___
  • ベストアンサー率40% (9/22)
回答No.5

No1です。 2個テストで作ったので試してください。 配列で比較する方法だと配列の数(インデックス)の増減にかかわらず コードを変更しなくてはいいので、メンテナンスが楽になると思います。 2個目は他の方の回答のワークシート関数と配列を使ったものです。 =============================================== Sub Test1() Dim x(0 To 2) As Long Dim i As Integer Dim lngMax As Long x(0) = 10 x(1) = 1 x(2) = 5 For i = LBound(x) To UBound(x) If x(i) > lngMax Then lngMax = x(i) End If Next i MsgBox "最大値:" & lngMax End Sub =============================================== Sub Test2() Dim x As Variant Dim i As Integer Dim lngMax As Long x = Array(10, 1, 5) MsgBox "最大値:" & Application.WorksheetFunction.Max(x) End Sub

noname#150929
質問者

お礼

Test2は知識の少ない私にも理解できました。 再度有難うございます。

その他の回答 (4)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

質問者のやり方(IF a>b )でやるとすると。。 '----------------------------------- Sub 最大数()   Dim a As Long   Dim b As Long   Dim c As Long   Dim Max As Long   a = 10   b = 200   c = 30   Max = a   If b > Max Then     Max = b   ElseIf c > Max Then     Max = c   End If   MsgBox "a,b,cの中で一番大きな数は " & Max & " です" End Sub '----------------------------------   以上です。  

noname#150929
質問者

お礼

有難うございます。できました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

こんなの最大値を求めるアルゴリズムとして、一番簡単なものだよ。 広く勉強しないと、VBの本を読んでいるだけではダメだという証拠。 エクセルでは Sub test91() d = Range("a65536").End(xlUp).Row m = Cells(1, 1) For i = 2 To d If Cells(i, "A") > m Then m = Cells(i, "A") End If Next i MsgBox m End Sub 1 ひとつの椅子がある。まずじゃんけんに勝ったほうが,椅子に座るゲームを想像せよ。 勝つとはこの質問の場合は値の大のほうだ。 始めの人が椅子に座る。 次の人が来て、2人でじゃんけんして、次の人が勝てば椅子に座り、負ければ、去る。これを最後の人までつづける。 最後に残った人が答え。 質問の場合はジャンジケンで無く、数の書いたカードを持っていて、見せ合いをして、自分の持っているカードにある数を比較すると考えればよい。 椅子に当たるのが、上記コードのmです。 ジャンケンの判定が If Cells(i, "A") > m Then に当たるのです。 普通の本の説明では、数は配列にあるものとして説明して、コードを書いてあります。 Sub test02() Dim x(10) '配列に値設定 d = UBound(x) MsgBox d m = x(0) For i = 1 To d If x(i) > m Then m = x(i) End If Next i MsgBox m End Sub ーーー 最小を求める場合も>が<に変わるだけ。

noname#150929
質問者

お礼

大変参考になりました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

ワークシート関数を使用した例です Sub 最大数() Dim a As Long Dim b As Long Dim c As Long a = 10 b = 20 c = 30 MsgBox "a,b,cの中で一番大きな数は" & Application.WorksheetFunction.Max(a, b, c) & "です" End Sub 参考まで

noname#150929
質問者

お礼

とてもシンプルでわかり易いです。 ありがとうございます。

  • Azzz___
  • ベストアンサー率40% (9/22)
回答No.1

こんにちは。 質問のような形で変数を使う場合は配列の変数にするとやりやすいと思います。 dim x(0 to 2) as long x(0) = 1 x(1) = 10 x(2) = 100 等の場合はループで配列の数字を比較していけばいいと思います。 for i = lbound(x) to ubound(x) ここで比較 next i このような場合は別途一時格納用の変数を設けるなどして やるのが一般的かなと思います。

noname#150929
質問者

お礼

早速のご回答ありがとうございます。 しかし使い方がよくわかりませんでした。 「ここで比較」の部分に、どういうコードを書けばよろしいでしょうか? 上記の例だと、x(2) が最大値になりますが どうやったらx(2) を求めることができるのでしょうか? 勉強不足で申し訳ございません。 再度ご回答いただければ幸いです。