こんばんは。
いくつか考えてみました。
#1 の回答への補足の
>=IF(ISNA(VLOOKUP~
の後は、もしかしたら、"" となっているのではありませんか?
>1以上の数値の中から最小値を求める
=SMALL(INDEX(SUBSTITUTE((MOD(COLUMN(A2:T2),3)=2)*(A2:T2>=1)*(A2:T2),"0",10^15)*1,,),1)
ただし、これは、="" という「長さ0の文字列」を除くことは出来ません。それは、数式の建て方や書式の問題です。絶対条件として、元の数式が変えられないのでないなら、エラーがTRUE の時に、「0」を返し、その行の書式を、「#,###,,」 などとしてくれれば良いと思います。
数式:
=IF(COUNTIF(範囲,検索値)=0,0,VLOOKUP(検索値,範囲,列番号,検索の型))
それがダメなら、
=MIN(IF(ISERROR((MOD(COLUMN(A2:T2),3)=2)*(A2:T2)),10^15,SUBSTITUTE((MOD(COLUMN(A2:T2),3)=2)*(A2:T2>=1)*(A2:T2),"0",10^15)*1))
このようにして、配列の確定(一旦式を入力したら、F2を押して、『ShiftとCtrlを押しながらEnterキー』を押して、再確定)する方法があります。
または、以下のようなユーザー定義関数を使うようにするか、いずれかの選択が必要だと思います。
ただ、元の、数式の建て方の工夫をすればよいはずですが。
'--------------------------------------------------------------
汎用型の空白や長さ0の文字列を数えないユーザー定義関数(試作段階)
=Min_Emit(">=1",B2,E2,H2,K2,N2,Q2,T2)
範囲に、数値を直接入れることも出来ます。
=Min_Emit(">=1",B2,E2,H2,K2,N2,Q2,T2,1)
(最小値,1になるはずです)
これは、配列数式も取り込み可能です。
例:
Min_Emit("",INDEX(SUBSTITUTE((MOD(COLUMN(A2:T2),3)=2)*(A2:T2>=1)*(A2:T2),"0",10^16)*1,,))
なお、条件は省略することが出来ません。(なお、これは汎用型で、この質問のために作ったものではありません)
'----------------------------------------------------------------
Public Function Min_Emit(条件 As Variant, ParamArray 範囲() As Variant)
'条件より最小値を求める関数
'条件:例; ">1" , ">=1", 数字単独の場合は、"1" は、"<>1" になる
'範囲:A1,B1,C1 .... ;または、A1:D1
Dim c As Range
Dim MinVal As Variant
Dim v As Variant
Dim a As Variant
If 条件 Like "*#[<->]" Then Exit Function
If 条件 = "" Then 条件 = "<>"""""
If InStr(条件, "=") = 0 And IsNumeric(条件) And VarType(条件) = vbString Then 条件 = "=" & 条件
If VarType(条件) = vbDouble Then 条件 = "<>" & 条件
For Each v In 範囲
If TypeName(v) = "Range" Then
For Each c In v
If Not IsEmpty(c.Value) And IsNumeric(c.Value) Then
If MinVal = Empty Then MinVal = c.Value
If Evaluate(c.Value & 条件) And Evaluate(MinVal & 条件) Then
If MinVal > c.Value Then
MinVal = c.Value
End If
End If
End If
Next c
'配列の場合
ElseIf VarType(v) = vbVariant + vbArray Then
For Each a In v
If MinVal = Empty Then
MinVal = a
End If
If IsNumeric(a) Then
If Evaluate(a & 条件) And Evaluate(MinVal & 条件) Then
If MinVal > a Then
MinVal = a
End If
End If
End If
Next a
Else
'数値の場合
If Not IsEmpty(v) And IsNumeric(v) Then
If MinVal = Empty Then MinVal = v
If Evaluate(v & 条件) And Evaluate(MinVal & 条件) Then
If MinVal > v Then
MinVal = v
End If
End If
End If
End If
Next v
Min_Emit = MinVal
End Function
お礼
>#1 の回答への補足の >>=IF(ISNA(VLOOKUP~ >の後は、もしかしたら、"" となっているのではありませんか その通りでした。 御指摘の通り「0」を返すことにより、 ANo.2の方法のままで全ての条件をクリアできました。 教えて頂いた以降の例は、現在の私のスキルでは理解に至りませんでした。 急を要する作業のため、今はこの状態で進めますが、今後に活用できるよう、この作業が終わり次第じっくり復習したいと思います。 ありがとうございました。