ワークシート関数IFが使えるということは「条件分岐」OKです。ならVBAでIf Thenも書けます。
優良可の第二弾。IF関数と比較もします。
問題:設備、取扱、法規の3つの問題があり全体の合計が6割以上で合格。ただし、3つのどれか40より低い点数があると不合格になる。
以下は数式バーに書いたIF関数の計算式です。テーブルを使っているのでセル番地ではなく項目名になります。それにしてもセルの中に入れる時に何度もセルの指定が必要ですね。
=IF(SUM(テーブル[@[設備]:[法規]])<180,”不”,IF([@設備]<40,”不”,IF([@取扱]<40,”不”,IF([@法規]<40,”不”,”合”))))
以下は、標準モジュールに書いたユーザー定義関数/カスタム関数/自作関数を使っている状態、数式バーの状態です。セルの指定は3つですから使いやすい。
=hanntei([@設備],[@取扱],[@法規])
以下を標準モジュールに書いています。文書になっているので読みやすい。コメントも簡単に書けます。
Function hanntei(setu, tori, hou)
If setu + tori + hou < 180 Then
hanntei = "不"
Else
hanntei = "合" '以下の判定前にとりあえず合
If setu < 40 Then hanntei = "不" 'Thenの内容が簡素なら一行の方が見やすい
If tori < 40 Then hanntei = "不"
If hou < 40 Then hanntei = "不"
End If
End Function
書いたユーザー定義関数がなくならないように、マクロが有効なブックで保存が必要です。
以下は、サンプルの表の作成とIF関数の入力をするマクロ
Sub 表作成()
If VBA.MsgBox("選択しているワークシートに上書きします!!!", vbOKCancel) = VBA.vbCancel Then Exit Sub
If ActiveSheet.ListObjects.Count = 1 Then ActiveSheet.ListObjects(1).Delete
Range("A1").Select
ActiveCell.FormulaR1C1 = "名前"
ActiveCell.Characters(1, 2).PhoneticCharacters = "ナマエ"
Range("B1").Select
ActiveCell.FormulaR1C1 = "設備"
ActiveCell.Characters(1, 2).PhoneticCharacters = "セツビ"
Range("C1").Select
ActiveCell.FormulaR1C1 = "取扱"
ActiveCell.Characters(1, 2).PhoneticCharacters = "トリアツカイ"
Range("D1").Select
ActiveCell.FormulaR1C1 = "法規"
ActiveCell.Characters(1, 2).PhoneticCharacters = "ホウレイ"
Range("E1").Select
ActiveCell.FormulaR1C1 = "判定"
ActiveCell.Characters(1, 2).PhoneticCharacters = "ハンテイ"
Range("A2").Select
ActiveCell.FormulaR1C1 = "名前1"
ActiveCell.Characters(1, 2).PhoneticCharacters = "ナマエ"
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A8"), Type:=xlFillDefault
Range("A2:A10").Select
Range("B2").Select
ActiveCell.FormulaR1C1 = "56"
Range("C2").Select
ActiveCell.FormulaR1C1 = "87"
Range("D2").Select
ActiveCell.FormulaR1C1 = "87"
Range("B3").Select
ActiveCell.FormulaR1C1 = "76"
Range("C3").Select
ActiveCell.FormulaR1C1 = "76"
Range("D3").Select
ActiveCell.FormulaR1C1 = "89"
Range("B4").Select
ActiveCell.FormulaR1C1 = "54"
Range("C4").Select
ActiveCell.FormulaR1C1 = "67"
Range("D4").Select
ActiveCell.FormulaR1C1 = "34"
Range("B4").Select
ActiveCell.FormulaR1C1 = "90"
Range("B5").Select
ActiveCell.FormulaR1C1 = "89"
Range("C5").Select
ActiveCell.FormulaR1C1 = "78"
Range("D5").Select
ActiveCell.FormulaR1C1 = "67"
Range("B6").Select
ActiveCell.FormulaR1C1 = "56"
Range("C6").Select
ActiveCell.FormulaR1C1 = "45"
Range("D6").Select
ActiveCell.FormulaR1C1 = "67"
Range("B7").Select
ActiveCell.FormulaR1C1 = "48"
Range("C7").Select
ActiveCell.FormulaR1C1 = "68"
Range("D7").Select
ActiveCell.FormulaR1C1 = "43"
Range("B8").Select
ActiveCell.FormulaR1C1 = "23"
Range("C8").Select
ActiveCell.FormulaR1C1 = "67"
Range("D8").Select
ActiveCell.FormulaR1C1 = "87"
Range("C8").Select
ActiveCell.FormulaR1C1 = "98"
Range("B2").Select
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$e$8"), , xlYes).Name = _
"テーブル"
Range("e2").Select
ActiveCell.FormulaR1C1 = _
"=IF(SUM(テーブル[@[設備]:[法規]])<180,""不"",IF([@設備]<40,""不"",IF([@取扱]<40,""不"",IF([@法規]<40,""不"",""合""))))"
'エラーになったら<の4箇所を半角文字にして下さい。
End Sub