お世話になります。
早速ですが、下記の構文を作成しましたが、Activecell.Rowの部分で悪さをし
上手く動きません。
行いたかった事としては、Functionにて関数を手作りしようと試みたのですが、
結局は壁にぶちあたってしまったって所です。。。
内容としては、エクセルが手動計算だった場合は、一回りで動作が終了するので
問題なく想定の値が叩き出されますが、自動計算にした途端に「別セルに入れた
計算式まで、Activecell.Rowに引きずられて計算をし、別の値に変わってしまう」
現象となってしまいました。。。(説明下手で済みません)
Public Function Shotoku(houshu As Long)
Dim ACcel As Variant
Dim FR As Range
With Worksheets("所得税月額表(平成24年分)")
ACcel = houshu
If ACcel < 88000 Then
Shotoku = 0
Exit Function
End If
For Each FR In .Range("C13:C347")
If ACcel < FR Then
If Cells(ActiveCell.Row, 51) = 0 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 4)
ElseIf Cells(ActiveCell.Row, 51) = 1 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 5)
ElseIf Cells(ActiveCell.Row, 51) = 2 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 6)
ElseIf Cells(ActiveCell.Row, 51) = 3 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 7)
ElseIf Cells(ActiveCell.Row, 51) = 4 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 8)
ElseIf Cells(ActiveCell.Row, 51) = 5 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 9)
ElseIf Cells(ActiveCell.Row, 51) = 6 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 10)
ElseIf Cells(ActiveCell.Row, 51) = 7 Then ←問題の個所です
Shotoku = .Cells(FR.Row, 11)
End If
Exit For
End If
Next
End With
End Function
計算式を当て込んで、例えば2行目のIF文の条件に引っかかった場合、他の
セルまでその行を読んでしまうので、条件が変わってしまう事態になってます。
イメージではActivecell.Rowがダメなんだと思いますが、これ以外のセル番地の
取得方法が分からなくって><;
どなたかお助け願います!!!
方法1:
>これ以外のセル番地の取得方法が分からなくって
application.callerを使います。
変更前:
If Cells(ActiveCell.Row, 51) = 0 Then
変更後:
if cells(application.caller.row, 51) = 0 then
方法2:
関数の引数としてセルを渡します。
現在の関数の使い方の意図でいうと、自セルを渡すような格好にして計算します。
他のセルを渡せば、「渡したセルの行の数字」で計算もしてくれます。
public function shotoku2(target as range, houshuu as long)
’中略
for each fr in range("C13:C347")
if cells(target.row, 51) = 0 then
:
end function
使い方:
H13セルに
=shotoku2(H13,99999)