MINIFS関数をご存知でしょうか?便利な関数ですが、Excel2019とOffice365のExcelバージョンしか現状使用出来ません。そこで、それ以前のExcelバージョンでも確認可能な方法があるので紹介します。
手順
1.開発タブのvisual Basicを押下(開発タブない場合、オプションから開発タブの表示をしてください。)
2.1の後に出てきた画面で、VBAProjectを右クリックしてください。(青反転のところ)
3.挿入>標準モジュールをクリックしてください。
4.標準モジュールをクリックしてください。(青反転のところ)
5.標準モジュールに以下のソースコードを張り付けてください。(furyuteiのソースコードを引用にしました)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
Function MINIFS(min_range As Range, ParamArray criteria_list()) Dim min_range_value_array As Variant Dim min_range_width As Integer Dim min_range_height As Integer Dim row_index As Integer Dim column_index As Integer Dim criteria_range_array() As Range Dim criteria_range_value_array() As Variant Dim criteria_condition_array As Variant Dim criteria_number As Integer Dim criteria_index As Integer Dim is_valid As Boolean Dim min_value As Variant MINIFS = CVErr(xlErrValue) criteria_number = UBound(criteria_list) - LBound(criteria_list) + 1 If criteria_number Mod 2 <> 0 Then 'On Error Resume Next 'Err.Raise Number:=450 ' 引数の数が一致していません。または不正なプロパティを指定しています。 'MsgBox CStr(Err.Number) & " : " & Err.Description 'Err.Clear 'On Error GoTo 0 Exit Function End If criteria_number = criteria_number / 2 ReDim criteria_range_array(criteria_number) ReDim criteria_range_value_array(criteria_number) ReDim criteria_condition_array(criteria_number) min_range_value_array = min_range min_range_height = UBound(min_range_value_array) min_range_width = UBound(min_range_value_array, 2) For criteria_index = 1 To criteria_number Set criteria_range_array(criteria_index) = criteria_list((criteria_index - 1) * 2) criteria_range_value_array(criteria_index) = criteria_list((criteria_index - 1) * 2) criteria_condition_array(criteria_index) = criteria_list((criteria_index - 1) * 2 + 1) If (UBound(criteria_range_value_array(criteria_index)) <> min_range_height) Or _ (UBound(criteria_range_value_array(criteria_index), 2) <> min_range_width) _ Then Exit Function End If Next criteria_index min_value = Empty For row_index = 1 To min_range_height For column_index = 1 To min_range_width is_valid = True For criteria_index = 1 To criteria_number ' TODO: 条件が式の場合に正しく動作しない→作り込みが困難なため、COUNTIF()を利用 'If criteria_range_value_array(criteria_index)(row_index, column_index) <> criteria_condition_array(criteria_index) Then ' is_valid = False ' Exit For 'End If If Application.WorksheetFunction.CountIf( _ criteria_range_array(criteria_index).Offset(row_index - 1, column_index - 1).Cells(1, 1), _ criteria_condition_array(criteria_index) _ ) = 0 _ Then is_valid = False Exit For End If Next criteria_index If is_valid = True Then If min_value = Empty Then min_value = min_range_value_array(row_index, column_index) Else min_value = Application.WorksheetFunction.Min(min_value, min_range_value_array(row_index, column_index)) End If End If Next column_index Next row_index If min_value <> Empty Then MINIFS = min_value Else MINIFS = 0 End If End Function |
あとがき
バージョンが古くて使えない関数も、このようにVBAのユーザー関数を使用して使えるようになります。いかがでしたでしょうか?昔はExcelで表計算だけをできていれば、戦力になれました。PCが一般化してきた今、他人と差別化を図る一つの手段として、VBAを学んでいくのも一つの手段です。一人で学んでいくのが難しいと思われている方は、ストアカ を利用してみてはいかがでしょうか?