2016-08-10 21 views
3

通貨コードがG10であるかどうかを示す簡単なUDFを作成しようとしています。 VBAのサブでテストするとうまく動作しますが、スプレッドシートで使用しようとすると#REFが得られます。 ユーザー定義関数はワークシートの#REFを返し、VBAで動作します

Function IsG10(Cur As Range) As Boolean 

    Dim G10s As Variant 
    Dim Rslt As Boolean 
    Dim Cross As Variant 

Cross = Cur.Value 
Rslt = False 

G10s = Array("USD", "GBP", "EUR", "CHF", "NOK", "SEK", "AUD", "NZD", "CAD", "JPY") 

If Not (Application.WorksheetFunction.IsText(Cross)) Or Len(Cross) > 3 Then 
    IsG10 = CVErr(xlErrNA) 
Else 
    For Each i In G10s 
     If Cross = i Then Rslt = True 
    Next i 
End If 

IsG10 = Rslt 

End Function 

この

は私がテストに使用しているサブです:私はそれを動作させるためにかなりの数のことを試してみた

Sub Test() 

Dim TC As Range 
Dim ans As Variant 
Set TC = Range("Y53") 

ans = IsG10(TC) 

End Sub 

、ブール値の代わりに文字列を返す、エラー処理を削除...何も動作しません。私は明らかなUDFの間違いを見ることができません。

ありがとうございます!

答えて

8

機能の名前を変更する必要があります。 ISG10は有効なセルアドレスです。したがって、=ISG10(A1)のようなセルに数式を入力すると、Excelは正しく解析できません。私がFunction Foobar(Cur As Range) As Booleanに変更するとうまく動作します。

+0

Excelで '= IsG10(...)'を '= ISG10(...)'に変更して、すべての文字を大文字にしてヒントを付けることができます。 –

+0

がよく目に付きます。 ++ – cyboashu

+2

'= Module1.ISG10(C3)'と完全修飾されていると動作します。ここで、 'module1'は関数が格納されているモジュール名です。 –

関連する問題