|
たけ さん、おはようございます。
>AccessVBAについては,IfやSelectCaseの構文を改変した程度として
>捉えてください.
Funcionの一例です(標準モジュールに以下を記述)。
Sub test()
Dim RR As Long
For RR = 3 To 10
With Application.ActiveSheet.Cells(RR, 1)
If .Value = "" Then Exit For 'A列がカラだと抜ける
MsgBox Format(GetMeals(.Offset(0, 1)), " 0点"), vbInformation, .Value & "得点"
End With
Next
End Sub
'
Function GetMeals(arg1 As Range) As Integer
Dim NN(1 To 3) As Integer
Dim RR As Long, CC As Long, TP As Integer
RR = arg1.Row '行番号取得
'
With arg1.Parent
For TP = 1 To 3
NN(TP) = 0 '初期化
CC = 2 + (TP - 1) * 3 '列初期位置
'食べるか否か
If .Cells(RR, CC).Value = 1 Then
'食べる人は10点
NN(TP) = NN(TP) + 10
CC = CC + 1 '食べる人数:2人以上で10点
If .Cells(RR, CC).Value >= 2 Then NN(TP) = NN(TP) + 10
CC = CC + 1 '食事時間(複数に分岐)
Select Case .Cells(RR, CC).Value
Case Is >= 20: NN(TP) = NN(TP) + 10 '20分以上で10点
Case Is >= 10: NN(TP) = 5 '10〜19分で5点
End Select
Else
'否と無回答はスルー
End If
Next
End With
'例:夜は2倍
NN(3) = NN(3) * 2
'結果
GetMeals = NN(1) + NN(2) + NN(3)
End Function
ちなみに、ワークシート関数としても使えます。
[K3セルの数式]=GetMeals(B3)
※参照するセルは同じ行ならどの列でもかまいません。
|
|