|
また質問させて頂きます。
Functionプロシージャを用いて、売上の合計額や、粗利等を調べる関数を作っています。
挙動としては完成したのですが、Application.Volatileを用いた際の再計算が行われず、#value!になってしまう問題があります。
数式で使用されるデータの形式が正しくありません、と表示されるのですが、
入力時や、F9での再計算では正しく表示されます。
あくまで他のセルの内容が変わった際の自動計算でそのエラーが表示されてしまいます。
どこの形式に問題があるかお恥ずかしいですが全く分からず、質問させて下さい。
解決法がお分かりの方、知恵を頂けませんでしょうか?
※計算結果自体は、問題無く表示されております。
ここからは作成した関数を貼り付けます。
長くなり本当に御迷惑をおかけ致します。
●集計
Function 集計(month As Double) As Variant
Application.Volatile
'そのセルの属する行のB列をシート取得の為にC_nameに入れる
Dim C_name As String
C_name = Cells(Application.Caller.Row, 2).Value
'関数が用いられている列がどこかを判別し、機能別番号に格納
'4で割った数字で判断する
'3=合計売上額
'0=合計仕入額
'1=合計粗利額
'2=粗利率
Dim F_num As Integer
F_num = Application.Caller.Column Mod 4
'変数monthに整数で1~12が入っているかの検査
If Int(month) <> month Then
集計 = "error_1:少数点"
Exit Function
ElseIf month < 1 Then
集計 = "error_2:0以下"
Exit Function
ElseIf month > 12 Then
集計 = "error_3:13以上"
Exit Function
Else
End If
'F_numによって出力するデータを変える。及びに1~4以外の数値に対してエラー処理も行う。
Select Case F_num
'●合計売上額
Case "3"
Dim sum_uriage As Long
'4~250行目までに制限中
For i = 4 To 250
'注文番号が入っている物を調べる
If Worksheets(C_name).Cells(i, 1).Value <> ("") Then
'日付フォーマットになっている物の、月を取得してmonthと比較
'合っていたら、合計売上額に加算
If Format(Worksheets(C_name).Cells(i, 16).Value, "m") = month Then
sum_uriage = sum_uriage + Worksheets(C_name).Cells(i, 8).Value
Else
End If
'注文番号が無い箇所で打ち切り、セルに合計売上額を表示
Else
集計 = sum_uriage
Application.Volatile
Exit For
End If
Next i
'●合計仕入額
Case "0"
Dim sum_siire As Long
'4~250行目までに制限中
For i = 4 To 250
'注文番号が入っている物を調べる
If Worksheets(C_name).Cells(i, 1).Value <> ("") Then
'日付フォーマットになっている物の、月を取得してmonthと比較
'合っていたら、合計仕入額に加算
'ただし、仕入れ額が記載されていないとその分少なくなってしまうので注意
If Format(Worksheets(C_name).Cells(i, 16).Value, "m") = month Then
sum_siire = sum_siire + (Worksheets(C_name).Cells(i, 5).Value * Worksheets(C_name).Cells(i, 6).Value)
Else
End If
'注文番号が無い箇所で打ち切り、セルに合計仕入額を表示
Else
集計 = sum_siire
Exit For
End If
Next i
'●合計粗利額
Case "1"
Dim sum_arari As Long
sum_arari = Application.Caller.Offset(0, -2).Value - Application.Caller.Offset(0, -1).Value
集計 = sum_arari
'●粗利率
Case "2"
Dim arari_ritu As Double
If Application.Caller.Offset(0, -3).Value = 0 Then
集計 = "--.--%"
Exit Function
Else
arari_ritu = Application.Caller.Offset(0, -1).Value / Application.Caller.Offset(0, -3).Value
集計 = arari_ritu
End If
'●その他のセルに入って居た場合
Case Else
集計 = "F_numが整数の1~4以外"
End Select
End Function
|
|