次のコードが1つのインスタンスで動作し、別のインスタンスで失敗する理由が混乱しています。次は#VALUE!エラー。#VALUEを返すVBA関数!
Function RateFetcher(Plan_Text As String, Zip_Text As String, Sex As String, Tabacco_Use As String, Age As Integer, State As String)
Dim Plan As String
Plan = StrConv("Plan " + Plan_Text, vbLowerCase)
Dim ProperState As String
ProperState = StrConv(State, vbProperCase)
Dim Search_Range As Range
Search_Range = Worksheets(ProperState).Range("A4:A600")
MsgBox (Search_Range)
Dim Location As String
For Each c In Search_Range
If StrConv(c.Value, vbLowerCase) = Plan And c.Offset(1, 0) = Zip_Text Then
Location = c.Address
End If
Next c
Dim Sex_Tab_Offset As Integer
Dim Combined As String
Combined = Sex + Tabacco_Use
If Combined = "F NO" Then
Sex_Tab_Offset = 1
ElseIf Combined = "M NO" Then
Sex_Tab_Offset = 2
ElseIf Combined = "F YES" Then
Sex_Tab_Offset = 3
Else
Sex_Tab_Offset = 4
End If
Dim Age_Offset As Integer
Age_Offset = Age - 65
RateFetcher = Worksheets(ProperState).Range(Location).Offset(Age_Offset, Sex_Tab_Offset).Value
End Function
一方、これは動作します。違いは、私がSearch_Rangeを明示的に定義していることですが、最初の例の柔軟性を持たせたいので、検索する各範囲を定義する必要がないためです。検索する範囲はState_name!$A$4:$A$500
です。
Function RateFetcher(Search_Range As Range, Plan_Text As String, Zip_Text As String, Sex As String, Tabacco_Use As String, Age As Integer, State As String)
Dim Plan As String
Plan = StrConv("Plan " + Plan_Text, vbLowerCase)
Dim ProperState As String
ProperState = StrConv(State, vbProperCase)
'Dim Search_Range As Range
'Search_Range = Worksheets(ProperState).Range("A4:A600")
Dim Location As String
For Each c In Search_Range
If StrConv(c.Value, vbLowerCase) = Plan And c.Offset(1, 0) = Zip_Text Then
Location = c.Address
End If
Next c
Dim Sex_Tab_Offset As Integer
Dim Combined As String
Combined = Sex + Tabacco_Use
If Combined = "F NO" Then
Sex_Tab_Offset = 1
ElseIf Combined = "M NO" Then
Sex_Tab_Offset = 2
ElseIf Combined = "F YES" Then
Sex_Tab_Offset = 3
Else
Sex_Tab_Offset = 4
End If
Dim Age_Offset As Integer
Age_Offset = Age - 65
RateFetcher = Worksheets(ProperState).Range(Location).Offset(Age_Offset, Sex_Tab_Offset).Value
`
エンド機能 `
まず、デバッガでコードをステップ実行して、エラーが発生している箇所を確認します。次に参照してください:http://stackoverflow.com/questions/349613/what-does-the-keyword-set-actually-do-in-vba – jtolle