34

VBAを使用してブックでいくつかの関数を定義し、それらをセルの数式で使用できると期待しましたが、Excelは関数を認識しません。#NAMEを取得しますか?

試した:

  • XSLXファイルを作成したことに気づき、それをXSLMファイルに変換しました。動作しませんでした。
  • 関数宣言からすべての型を削除しました。動作しませんでした。
  • 関数をワークシートVBAモジュールに移動しました。動作しませんでした。
  • 宣言にパブリックを追加しました。動作しませんでした。

私は何が欠けていますか?

これも賢いコードではありません。

Function Square2(AnyNumber)

'return the square of any integer
Square2 = AnyNumber * AnyNumber

End Function
4

9 に答える 9

53

答え

関数を「ThisWorkbook」領域に配置すると、#NAME?問題が発生する可能性があります。新しいモジュールを作成し (VBAProject フォルダーを右クリックし、[挿入]、[新しいモジュール] を選択)、代わりに関数をそこに置きます。

手順

  1. VBA エディタAlt + F11を開きます (Windows の場合 / Fn + Option + F11Mac の場合)
  2. VBAProjectを右クリック
  3. 挿入 >> モジュールを選択
  4. Public内に関数を作成しますModule1。たとえば、次のようにします。

    Public Function findArea(ByVal width as Double, _
                             ByVal height as Double) As Double
        ' Return the area
        findArea = width * height
    End Function
    
  5. 他の関数と同様に、セルから呼び出します。=findArea(B12,C12)

マクロのスクリーンショット

于 2013-04-30T09:52:35.437 に答える
8

次のように苦労した後、私は同じ問題に直面しました:

私の関数は、Personal.XLSB というマクロ ブックのモジュール内にありました。関数名の前に個人用マクロ ブックのファイル名と ! を付けたので、関数名が theFunction(x,y) の場合、セルに「=PERSONAL.XLSB!theFunction(x,y)」と入力しました。これは機能しました。

PERSONAL.XLSB は常に非表示モードで開いていることに注意してください。

于 2016-02-17T19:02:08.330 に答える
4

デザイン モードでないことを確認します。

Excel の開発者タブと、VBA エディターの実行/停止ボタンの横にデザイン モード ボタンがあります。選択されていて、選択を解除できない場合は、マクロを有効にしてブックを再度開いてみてください。

それでも有効な場合、またはマクロを実行できない場合は、マクロが有効になっていることを確認してください。

マクロを有効にします。

-- https://stackoverflow.com/a/20659823/258482

于 2015-01-19T17:36:09.297 に答える
1

XLSXファイルとXLSMファイルは関係ありません。形式は、ファイルを保存するときに役割を果たします。(XLSX では、ファイルの保存中に VBA コードが削除されます)。

http://office.microsoft.com/en-us/excel-help/creating-custom-functions-HA001111701.aspxの以下のコードは、私の Excel の新しいモジュール内で非常にうまく機能します。

Function Discount(quantity, price)
    If quantity >= 100 Then
        Discount = quantity * price * 0.1
    Else
        Discount = 0
    End If
    Discount = Application.Round(Discount, 2)
End Function

私はあなたのコードを見ることができないので、以下の機能もあなたのために働くかどうか試してもらえますか? その場合は、以下の関数を自分の関数になるように変更を開始します (たとえば、最初に名前を変更して機能するかどうかを確認し、次にパラメーターの数を変更して機能するかどうかを確認し、次にパラメーターの名前を変更します)。

于 2012-09-10T12:19:35.683 に答える
1

モジュールの名前が関数と同じ場合、問題が発生する可能性があると思います。モジュールまたは関数の名前を変更してみてください。

于 2015-03-17T14:11:14.957 に答える
1

Excel を開き、コード エディター (Alt+F11) を開き、新しいワークブックを選択し、新しいモジュールを挿入して、次のように入力しました。

Function Decrement(i As Integer) As Integer
  Decrement = i - 1
End Function

次にワークブックに戻り、A1 で =Decrement(2) と入力して Enter キーを押すと、うまくいきました。=Decr と入力すると、関数のドロップダウン リストに Decrement が表示されました。これは認識され、機能しました。ワークブックを保存する必要さえありませんでした。

これがあなたの質問に対する正確な答えではないことはわかっていますが、運が良かったレシピです.

于 2012-09-11T16:08:35.160 に答える
0

最新バージョンの Excel を使用している場合、別のブックで VBA 関数を表示するには、次の操作を行う必要があります。

  1. ワークブックを .xlsm として保存する

  2. 上記の提案に従ってマクロを有効にします

  3. 参照を設定します。VBA (Alt-F11) で [ツール/参照] を選択し、使用するマクロを含むワークブックを参照します。リスト内のその参照を確認してください。

    モジュール名が競合しているというエラー メッセージが表示された場合は、最初にプロジェクト エクスプローラーで名前を変更してください。

于 2015-03-24T10:10:12.307 に答える