新生活を充実させるための「こだわり」を取材!!

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つやそれ以上になった時に、応用を利かせるため質問しました。
よろしくお願いします。

教えて!goo グレード

A 回答 (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
    • good
    • 2
この回答へのお礼

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

お礼日時:2009/10/17 23:45

質問者のやり方(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
'----------------------------------
 
以上です。
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/17 23:44

こんなの最大値を求めるアルゴリズムとして、一番簡単なものだよ。


広く勉強しないと、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
ーーー
最小を求める場合も>が<に変わるだけ。
    • good
    • 2
この回答へのお礼

大変参考になりました。

お礼日時:2009/10/17 00:42

ワークシート関数を使用した例です



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

参考まで
    • good
    • 3
この回答へのお礼

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

お礼日時:2009/10/08 23:32

こんにちは。



質問のような形で変数を使う場合は配列の変数にするとやりやすいと思います。

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

このような場合は別途一時格納用の変数を設けるなどして
やるのが一般的かなと思います。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
しかし使い方がよくわかりませんでした。

「ここで比較」の部分に、どういうコードを書けばよろしいでしょうか?
上記の例だと、x(2) が最大値になりますが
どうやったらx(2) を求めることができるのでしょうか?

勉強不足で申し訳ございません。
再度ご回答いただければ幸いです。

お礼日時:2009/10/08 23:03

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング