1

シートの他の場所のグローバル設定に基づいて、入力されるセルの数式として2つの入力パラメーターのいずれかを返すExcelVBA関数を作成しようとしています。IE、シートのどこかで誰かがAまたはBを設定すると、関数AorBを呼び出す数式は、グローバル設定が何であるかに基づいてAまたはBを返します。

このようなもの:

Function AOrB(A As Variant, B As Variant) As Variant
    If someSetting = A Then
        AOrB.formula = A
    ElseIf someSetting = B Then
        AOrB.formula = B
    End If
End Function

私はかなりひどく調べてきましたが、関数を返すためにどのタイプを入力して返すかについての知識がありません。

どんな助けでもいただければ幸いです。

4

2 に答える 2

2

UDF から数式を変更することはお勧めできません。可能ですが複雑です。

あなたが説明していることを行う適切な方法は、式の IF を使用することだと思います。

=IF(someSetting = A, AFormula, If(someSetting = B,BFormula,""))

someSettingがコードに格納されている場合、UDF を作成してその値を取得できます。そのようです:

Private mySetting As Variant
Function SomeSetting() As Variant
    SomeSetting = mySetting
End Function
于 2012-10-30T22:26:38.827 に答える
1

グローバル設定を保持するセルに、「ABChoice」などの名前を付けます。(これを行うには、現在のセルの位置が表示されている数式バーの左側をクリックし、目的の名前を入力します)。

次に、式を書き直します。

Function AOrB()
    If ThisWorkbook.Range("ABChoice") = "A" Then
        AOrB = "A"
    ElseIf ThisWorkbook.Range("ABChoice") = "B" Then
        AOrB = "B"
    Else
        AOrB = "A" 'could switch to B, whichever is the default
    End If
End Function

データ検証 ([データ] メニューの下) を使用して、ユーザーが「A」または「B」のみを入力できるようにすることができますが、最後の Else 句を使用すると、デフォルト状態が選択されていると仮定して、それが不要になります。

これは、VBA を必要としないグローバル セルに名前を付けて、後の式でそれを参照するのと同じです。私はあなたの機能がUDFを必要とする舞台裏でもう少し複雑であると仮定しています. そうでない場合は、名前付き範囲を使用してください。

実際には、「A」または「B」の代わりに 1 または 2 を使用することをお勧めします。これは、グローバル設定を参照する必要があるときに CHOOSE 関数を使用できるためです。これは、IF 関数を使用するよりも構文が単純です。

于 2012-10-30T22:28:57.170 に答える