No.4ベストアンサー
- 回答日時:
面白そうなので汎用関数を作ってみました。
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
No.5
- 回答日時:
#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
No.3
- 回答日時:
素で打ってますので文法等心配ですが、質問通りで考えるならこんな感じでは?
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
これならどうでしょう。
この回答へのお礼
お礼日時:2008/08/02 22:51
ありがとうございます。
Excel関数みたいにMINとかないのですね。
こういう風にロジカル的にやらないといけないのですね。
勉強になりました。
No.2
- 回答日時:
こんなんの次のロジックでやるのは常識。
第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")などは、配列を指定とか、ファイルを読むとか色々だと思うが。
この回答へのお礼
お礼日時:2008/08/02 22:45
ありがとうございます。
Excel関数みたいにMINとかないのですね。
こういう風にロジカル的にやらないといけないのですね。
勉強になりました。
No.1
- 回答日時:
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とかが最低値なら検出されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 最小値の最初を求める問題なんですけど、これと同じような区間が動くときの最初値を求める問題で下に凸のグ 4 2022/08/10 11:18
- 数学 ラグランジュの未定乗数法を用いる問題 3 2023/05/15 14:48
- 数学 条件付き極値問題といわれる問題です。ラグランジュの乗数法 について、質問したいことがあります。 条件 3 2023/05/15 21:38
- 数学 多様体について質問です。 Rを実数全体としてf:S^n={(p_1,…,p_(n+1)∈R^(n+1 2 2023/06/24 00:54
- 物理学 2物体の単振動 1 2023/08/17 20:27
- 数学 最大値・最小値問題 7 2023/05/18 09:16
- 数学 高校数学について 関数y=-x^2+2x+c (xは0以上3以下)の最小値が-5であるときの定数cの 1 2022/10/01 09:52
- 数学 大学数学の問題です。 条件 (x/a)^2+(y/b)^2+(z/c)^2=1 のもとで、f(x,y 3 2023/05/01 11:28
- 数学 2*2の行列に対して固有値の最大実部を与えるkの値を求めたい 3 2022/11/08 16:26
- 数学 数学 2時間数に関わる問題について教えてください。 x≧1 y≧-1 2x+y=5 であるとき、xy 7 2022/10/29 10:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのオートフィルタで抽出し...
-
VBA 配列に格納した値の平均の...
-
DataSetから、DataTableを取得...
-
【VBA】ユーザーフォーム リス...
-
VB6・Split関数・連続した空白...
-
Excel VBA 配列の分割について
-
array関数で格納した配列の型を...
-
csv形式のファイルを配列に...
-
エクセルVBAで変数をセルに一行...
-
Datatableへの代入
-
数字をコンマで区切った文字列...
-
VB6.0 ファイルの一括読込み
-
Excelの使用方法
-
C#で配列のフィールドを取得したい
-
配列がとびとびである場合の書き方
-
SUMPRODUCT関数を用いた最小値
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
Excelのセルの色指定をVBAから...
-
[エクセル]連続する指定範囲か...
-
エクセルで、絶対値の平均を算...
-
VBA listBoxについて
-
表にフィルターをかけ、絞った...
-
VBA 配列に格納した値の平均の...
-
iniファイルのキーと値を取得す...
-
[VBA]改行入りのセルの値を配列...
-
配列がとびとびである場合の書き方
-
エクセルでエラーを無視して一...
-
DataSetから、DataTableを取得...
-
Excel オートフィルタのリスト...
-
Split関数でLong配列に格納する...
-
読み込みで一行おきに配列に格納
-
VB6.0 ファイルの一括読込み
-
SUMPRODUCT関数を用いた最小値
-
INDEX(D:D,L3)の意味は?
-
Dictionaryを使い4つの条件の一...
おすすめ情報