プロが教えるわが家の防犯対策術!

VB初心者です。宜しく御願いします。

VB6で、最小値を求める方法ってありますか?

変数3つに値が入っていて、そのうちのいずれが最小値なのかを求めたいのです。
もっと言えば、「0(ゼロ)」を除いて最小値を求めたいのです。

なにぶんVBを初めたばかりで、分かりません。
どなたか、ご教授頂ければと思います。宜しくお願い致します。

教えて!goo グレード

A 回答 (5件)

面白そうなので汎用関数を作ってみました。


0(ゼロ)は除くって条件ですから汎用じゃないですが(笑)
1.引数は幾つでも構いません。(VBの制限内)
2.文字型でも数値と判断できれば比較の対象になります。
3.数値でなければ比較の対象から外れます。
4.判定不能の場合はEmpty値が返ります。

使用例
Dim Ans As Variant
Ans = Min(hoge1, hoge2, hoge3 …)
if IsEmpty(Ans) then
  MsgBox "判定不能"
Else
  MsgBox "最小値は" & CStr$(Ans) & "です"
End If

以下、汎用関数
Function Min(ParamArray Arg()) As Variant
  Dim Idx As Long, Evl As Variant, Rsl As Variant
  For Idx = LBound(Arg) To UBound(Arg)
    If IsNumeric(Arg(Idx)) Then
      Evl = Evaluate(Arg(Idx))
      If Evl <> 0 Then
        Select Case True
        Case IsEmpty(Rsl): Rsl = Evl
        Case Rsl > Evl:   Rsl = Evl
        End Select
      End If
    End If
  Next
  Min = Rsl
End Function
    • good
    • 0
この回答へのお礼

ありがとうございます。
関数まで作って頂いて恐縮です。
勉強になりました。

お礼日時:2008/08/02 22:47

#4の改良版(笑)



Function Min(ParamArray Arg()) As Variant
  Dim Idx As Long, Evl As Variant, Rsl As Variant
  For Idx = LBound(Arg) To UBound(Arg)
    If IsNumeric(Arg(Idx)) Then
      Evl = Evaluate(Arg(Idx))
      Select Case True
      Case Evl = 0    'この行コメントアウトで汎用関数
      Case IsEmpty(Rsl): Rsl = Evl
      Case Rsl > Evl:   Rsl = Evl
      End Select
    End If
  Next
  Min = Rsl
End Function
    • good
    • 0
この回答へのお礼

ありがとうございます。
助かりました。

お礼日時:2008/08/02 22:49

素で打ってますので文法等心配ですが、質問通りで考えるならこんな感じでは?



min=0
if a<>0 then min=a
if b<>0 and min>b then min=b
if c<>0 and min>c then min=c

これで、min に最小値が入ります。また min に 0 が残っているときは全ての値が 0 だったということです。と、ここまで打って a が 0 で b c ともプラスの時に正しい結果が出ないことに気付きました。

min=0
if a<>0 then
min=a
elseif b<>0 then
min=b
elseif c<>0 then
min=c
endif
if b<>0 and min>b then min=b
if c<>0 and min>c then min=c

これならどうでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Excel関数みたいにMINとかないのですね。
こういう風にロジカル的にやらないといけないのですね。
勉強になりました。

お礼日時:2008/08/02 22:51

こんなんの次のロジックでやるのは常識。


第1レコードを最小値にするm=r(1)
第2レコードから終わりレコードまで
If R(i)<m then
m=r(i)
End If
を行う
ーー
>0(ゼロ)」を除いて最小値を求めたいのです
If R(i)=0 then 上記の処理をスキップ
ーーーー
エクセルVBAでやると(エクセルではMIN関数が使えるが、別にして)
Sub test01()
d = Range("a65536").End(xlUp).Row 'データ数
m = Cells(1, "A")
For i = 1 To d
If Not (Cells(i, "A") = 0 Or Cells(i, "A") = "") Then
If m > Cells(i, "A") Then
m = Cells(i, "A")
End If
End If
Next i
MsgBox m
End Sub
実際は
Cells(1, "A")などは、配列を指定とか、ファイルを読むとか色々だと思うが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Excel関数みたいにMINとかないのですね。
こういう風にロジカル的にやらないといけないのですね。
勉強になりました。

お礼日時:2008/08/02 22:45

Option Explicit




Function Minimum(arr() As Double) As Double

Dim i As Integer
Minimum = 0

For i = 0 To UBound(arr)

If arr(i) <> 0 Then

Minimum = arr(i)
Exit For

End If

Next i

If Minimum = 0 Then

Exit Function

End If

For i = 0 To UBound(arr)
If (Minimum > arr(i)) And (arr(i) <> 0) Then

Minimum = arr(i)

End If

Next i

End Function

Sub main()
'変数の値を配列に格納するのは自分で書いてください


Dim a(5) As Double

a(0) = 0
a(1) = 10
a(2) = 8
a(3) = 4
a(4) = 7
a(5) = 1

If Minimum(a) <> 0 Then

MsgBox ("0を除く最低値:" & CStr(Minimum(a)))

Else

MsgBox ("全ての値が0だった。")

End If

End Sub

'条件が「0でない」なので-8とかが最低値なら検出されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Excel関数みたいにMINとかないのですね。
こういう風にロジカル的にやらないといけないのですね。

お礼日時:2008/08/02 22:44

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


人気Q&Aランキング