• 締切済み

Xpでのエクセルアドインの登録場所

自作の関数(ユーザーファンクション)を、windows98で作成し、アドインとしてMyDocumentsの下においていました。これをたとえば、UserFUNC.xlaとします。 これを引用する多数のブックがあるのですが、今回Xpに移行することになり、これUserFUNC.xlaを何処におくべきか分からず困っています。種々試しましたが、98から移行したブックを開くと、関数名が見つからない#NAME#?のエラーになります。たとえば、関数FUNC1は、'C:\Mydocuments\UseFUNC.xla'!FUNC1 のようになっているので、これを!以前を削除して、FUNC1 と書き直すとちゃんと計算してくれます。しかし、すべての引用を書き直すことは不可能です。正しい方法を教えてください。

noname#170484
noname#170484

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

>これまで作ってきたブックの全てを、置換して使う(’C:MyDocuments..'をブランク''に置換する)ということも、事実上不可能です。 今、改めて、Addin の移動のテストをしてみました。 結論的には、2つの方法しかないようですね。  1つは、同じフォルダーを作って、そこに入れておく。  もう1つは、全ブックのアドインの式の置換のマクロを作って、自動置換をさせる。 ということでした。 今後のことも考えると、どうやら、  #*:\Program Files\Microsoft Office\Office\Library  #の方がベターだそうです。 こちらは、間違いなさそうですね。 でも、これは、xla型のアドインの限界ですね。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3 の訂正です。 #C:\Program Files\Microsoft Office\Office\Library #の方がベターだそうです。 #ユーザー・アドインは、そちらには入れないということなのですね。 #配布上の建前みたいなこともあるかと思います。 今、もう1度、その話の記録を追ってみましたが、その部分はあやふやです。 確かに、Win9x 系では、そういう話だったことには間違いありませんが、検討もせずに今まで信じていたのですが、Win Xpになると、意味が違ってくることに気が付きました。その当時の私とレベルも違いますし、今、それが必ずしも、正しいとはいえません。2つのうちの1つという、大意は変わりませんが、その部分は、<疑問がつく解答>として、棚上げさせていただきます。 混乱させてすみません。

noname#170484
質問者

お礼

Wendy02さん、ありがとうございます。 アドインを置く場所によって、こういう混乱が生じるとは知りませんでした。 Xpまでは、マシンの変更やOSの変更を問題なく乗り切っていたので、今回初めて遭遇した問題です。 なにかうまい抜け方があるのかと思っていました。 これまで作ってきたブックの全てを、置換して使う(’C:MyDocuments..'をブランク''に置換する)ということも、事実上不可能です。また、Xp以降のことも考えると、種々悩ましくなるばかりです。 また、ご教示ください。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

hana-hana3さんがすでに述べられてはいますが、 もともと、"C:\My Documents\" には、アドインは置くべきではありませんね。特別なユーティリティを別に付けていれば良いのですが、支障はないものの、後々、あまり具合が良くありません。 それで、ある信頼のおける方に、昔、同じ質問をしたことがあるのですが、 >(全ユーザー共通) >[Officeインストールディレクトリ]\Office\Library\ >(ユーザー別) つまり、例では、 C:\Program Files\Microsoft Office\Office\Library の方がベターだそうです。 優先権というのか、Excelは自動的に、\Application Data 側を探すようですが、一応、棲み分けをさせ、ユーザー・アドインは、そちらには入れないということなのですね。配布上の建前みたいなこともあるかと思います。(厳密に決まりではありません。) その上で、アドインをメニューの[ツール]の[アドイン]の「参照」で探すようにすれば良いわけです。 C:\My Documents\が、Excelのデフォルトドライブだから、!前の部分を削除すると計算するということでしょうけれど、一旦、最初から、アドインの登録のし直しのほうがよいと思います。 上記2つのフォルダ以外の場所は、お勧めできません。アドインを消しても、Excel上からは、その名称を通常メニューからは削除できないからです。 参考:MSDN: Office アプリケーション固有のアドインの配置

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/modcore/html/deovrdeployingapplicatio
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

訂正です。 >エクセルの置換機能で「'C:\Mydocuments\」の部分を エクセルの置換機能で「'C:\Mydocuments\UseFUNC.xla'!」の部分を にしてください。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

アドインフォルダは規定の位置に置いてください。 (全ユーザー共通) [Officeインストールディレクトリ]\Office\Library\ (ユーザー別) [ユーザー別Profileディレクトリ]\Application Data\Microsoft\AddIns\ または、 Sub LibPath() MsgBox Application.LibraryPath MsgBox Application.UserLibraryPath End Sub で表示されるフォルダ。(前記と同じですが・・・) あとは、エクセルの置換機能で「'C:\Mydocuments\」の部分を "" (空白)で置換すると良いでしょう。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1403067

参考URL:
http://qajin.hp.infoseek.co.jp/extool/,http://oshiete1.goo.ne.jp/kotaeru.php3?q=1403067
noname#170484
質問者

お礼

hana-hana3 さん、ありがとうございます。 規定のフォルダーというのがあるのですね。 知りませんでした。 MyDocumentsなら、未来永劫にユニークなフォルダーだと、Win9x時代には思っていましたので。 早い話が、手遅れということでしょうか? そういっていただけると安心するわけですが、 何かうまい方法があるのかと思っていました。 安心しても、問題解決ではないのですが。。。

関連するQ&A

  • EXCEl:ユーザー定義関数をLANで共有する方法

    LANに接続しているユーザーでVBAを共有する仕組みを以下のように構築しています。 == サーバー環境 == VBAはアドイン(Addin.xla)としてサーバー(\\SvA)に保存。 サーバーがもう1つあり(\\SvB)、Addin.xlaは、\\SvAから \\SvBに定期的にコピー。 \\SvAと \\SvBは、物理的に距離が離れているため、1つにできません。 == クライアント環境 == クライアントPCの XLSTARTフォルダには、Addin.xlaのショートカットを置く。 \\SvAのユーザーであれば、\\SvA\Addin.xlaへのショートカット、 \\SvBのユーザーであれば、\\SvB\Addin.xlaへのショートカットです。 Addin.xlaに変更があった場合に \\SvA\Addin.xlaを更新するだけなので、この方法を採用し、うまく運用できているのですが、ユーザー定義関数をワークシートで使用したいということになって、ハマってしまいました。 \\SvAのユーザーがユーザー定義関数 User1()をワークシートに =User1()と書き込んで他のユーザーにブックを配布しました。 \\SvAのユーザー間では問題なくブックを使用できますが、\\SvBのユーザーがそのブックを開くと 「このブックには、ほかのデータソースへのリンクが含まれています。」というメッセージが表示されます。 ここで、更新を選択すると、 「このブックには更新できないリンクが1つ以上含まれています。」というメッセージが表示されます。 ここで、継続を選択すると、 ユーザー定義関数が入力されたセルは #NAME? エラーが表示されます。\\SvBのユーザーのワークシートでは、ユーザー定義関数が ='\\SvA\Addin.xla'!User1()となっています。 この問題を解決する方法がないでしょうか。よろしくお願いいたします。

  • Excel2003でアドインの更新ができない

    お世話になります。 環境は、WindowsXp Sp3 + Excel2003 Sp3 です。 VBAでプログラムを作成し"sss.xla"で保存します。 この"sss.xla"を"C:\Documents and Settings\<USER>\Application Data\Microsoft\AddIns"へ入れます。 Excelを起動しツール→アドインを開くと作成したアドインが表示されているのでチェックします。 また、チェックをはずすとアドインが無効になります。 アドイン(マクロ)の起動には「CTRL+SHIFT+J」を関数(サブルーチン)「sss」へ割り当てています。 ここまでは問題なく動作しています。 "sss.xla"を修正します(たとえば、足し算していたものが間違っていて掛け算に修正する等です)。 この修正した"sss.xla"を上記のフォルダーへ上書きコピーします。 Excelを起動してアドインを動かしてみると修正前のものが動いてしまいます。 (セルに色をつけたりもしていますので明らかに修正前のものが動いています。) インターネットでいろいろ探してみたところ、 「"C:\Program Files\Microsoft Office\OFFICE11\Library"へ"sss.xla"を入れると大丈夫」 との情報があったので試してみましたがだめでした。 アドインを無効にし"・・・\AddIns"から削除して"・・・\Library"へ入れています。 "sss.xla"本体とは別にどこかにキャッシュされたりしているのかとも思い、Cドライブを"sss.xla"で全検索したり、レジストリーを検索したりしましたがそれらしいものは見つかりませんでした。 (ファイルそのものは削除しているので、どこかにキャッシュされているのだろうと思いました。) さらに修正した"sss.xla"を"sss101.xla"としてアドイン登録しても動くのは"sss.xla"が動いてしまいます。 どうすれば修正した"sss.xla"を動かすことができるようになるでしょうか。 よろしくお願いします。

  • 自作アドインのFunctionプロシージャの戻り値を取得

    ExcelVBAのコード内で、自作アドインのFunctionプロシージャを呼び出して戻り値を取得したいのですが、方法がわかりません。 例えば、AddinTest.xlaにPublic Function FuncTest()があり、その戻り値が"Test"だとして、他のExcelファイルのマクロ内で、Msgboxで戻り値"Test"を表示するなど。。。 アドイン内のSubプロシージャを呼び出すには、Application.Run macro:="AddinTest.xla!~"と記述すれば呼び出せることはわかったんですが、Functionプロシージャの戻り値を取得することができないのです。 よろしくご教授ください。

  • ユーザー定義関数(アドイン化したもの)の入ったエクセルを複数のPCで(社内LANで共有し)コピーし使う方法を教えて下さい!

    エクセルで、ユーザー定義関数(アドイン化した物)の入った計算書のフォーマットを作りました。(〔フォーマットA.exl〕とします。) これを社内LAN上で共有し、複数のPCよりこの〔フォーマットA〕をコピーし各自のPC上で利用(保存も各自のPC)出来るようにしたいのですが、 【問題1】 ローカルネットワーク → ファイルサーバー → 共通フォーマット   → 〔フォーマットA〕と使用しているユーザー定義関数のアドインファイル2つ この状態で〔フォーマットA.exl〕を、〔PC1〕にコピー&ペーストし開くと、アドインの参照先が勝手に変わってしまいます。 【='\\Xp_file_server\A (i)\共通フォーマット\Myアドイン\ユーザー関数のアドイン .xla'!myEvalAry(G27) とあるべきものが、  ='C:\Documents and Settings\PC1\デスクトップ\Myアドイン\ユーザ-数のアドイン .xla'!myEvalAry(G27) 】 直接ネットワーク上の〔フォーマットA〕を開き、名前を付けて保存 で〔PC1〕に保存すると問題なく参照するのですが。。。 この〔フォーマットA〕は数式も入っており複数の人が使うので開かずにコピーしたいんです。 【問題2】 エクセルを開くのに時間がかかってしまう。 アドインを読みに行っているからだとは思うのですが。。。 保存場所の問題でしょうか? ネットワークの知識はほとんどなく、基礎的なことなのかもしれませんが、 どなたか教えてください。 よろしくお願いします。

  • ExcelのMacroOptionsメソッド

    エクセルのFunctionプロシジャーにてユーザー定義関数を作成したのですが その説明を[マクロ オプション] ダイアログ ボックスにいれようとMacroOptionsメソッドにて 説明をいれました。 このメソッドの実行イベントはWorkbooks_Openイベントでいれればいいとのことですけど ユーザー定義関数をいつでも使用したいので、エクセルブック本体にマクロとして組み込む のではなくアドインマクロとして、作成した標準モジュールのあるエクセルをアドインとして xlamで保存し、アドインを参照することにより使用したいと考えています。 その際、このユーザー関数の説明をいれるためにMacroOptionsメソッドをいれたいのですが xlamのThis_WorkBookモジュールのWorkbooks_Openイベントにいれましたが、実行されず [マクロ オプション] ダイアログ ボックスに表示されません。 どのモジュールのどのイベントにいれるのでしょうか? できることならxlam内のモジュールにいれたいのですが・・・・

  • phpコールバック関数について

    php初心者のものですが、コールバック関数(可変関数)についての質問です。 //引数の与えらえられた名前をもつ関数が存在すれば呼び出すための関数 function func_caller($name)(2) { if (function_exists($name)) { (3) $name(); //可変換数をして関数の呼び出し } } function foo() { echo 'foo call', PHP_EOL; } func_caller('foo'); //foo called(1) とあるのですが (1)の関数が(2)に呼ばれて$nameはfooが入ってて (3)が評価されまでわかるのですが次にどうなっていくのかわかりません。 どなたかわかる方いらっしゃいましたらどうか教えていただけないでしょうか? 何卒よろしくお願い致します。

    • ベストアンサー
    • PHP
  • Excel VBA ユーザ関数 他ブックセル範囲の引渡し

    Excel VBA の ユーザ関数に、そのユーザ関数を使用するブックとは別のブックのセル範囲を引数で渡したいのですが、可能でしょうか? =test_function('C:\Documents and Settings\hiropon\My Documents\[Book2.xls]Sheet1'!$A$1)みたいな感じで ・・・・ 関数の定義側で オブジェクト変数を用意すればよいのかと思いましたが、だめでした。 Function test_function(myvar As Object) As Vriant  .・・・・・・・ End Function myval.worksheet.name でワークシート名 Sheet1 は 取得できますが パス名とブック名はどうしたらよいのでしょうか? 根本的に違う方法がある? どなたか方法をご教授願います。

  • 複素数関数のユーザー定義方法等をお教えください

    カテゴリーにVBAがありませんでしたので VBに投稿させていただきます。 EXCEL2000VBAで複素数関数や三角関数等を用いて 加速度波形処理の勉強をしています。 過去のQ&Aで VBAアドインの複素数関数を用いた場合の 計算時間の長さを短縮する方法としまして (1)ユーザー定義で複素数関数計算を作成する。 (2)モジュールに直接書込む。 との記述がありました。(質問番号:81639) 上記(1)(2)につきまして詳しくお教えください。 自作のVBAにどのようにして上記(1)(2)を 作成又は書込みすれば良いのかがわかりません。 複素数関数計算のFUNCTION?等も お教えいただけましたら幸いです。 宜しくお願いします。

  • TEXTCALCの使い方

    他社から計算書のデータをもらったのですが、 そこにTEXTCALCが入った計算式が組み込まれていました。 ユーザー関数ということで、自分でダウンロードして、 以下、書いてある通りにしたのですが、 ************************************************* MicrosoftEXCEL(以降EXCELという) のアドインをセットアップしたフォルダ(*1)に TEXTCALC.XLA をコピーします。 *1. C:\Program Files\Microsoft Office\Office\Library など EXCELを起動し、ツール(T) - アドイン(I)を選択します。 ************************************************* 再起動させても、計算式を入れ直しても 「#####」 にしかなりません。 ちなみに式は 0.2×1.0/(2×π)×ルート(記号)(9.8×6.638) で、TEXTCALC関数の計算式は =TEXTCALC(セル1)/TEXTCALC(セル2)*SQRT(TEXTCALC(セル3)) です。 どうやったら答えが出るか、教えてください。 よろしくお願いします。

  • VBAで書いたExcelユーザー定義関数が上手く動きません

    WinXPSP2 Office2003 を使用しています。 プログラムは、本やネットで調べただけの素人です。 具体的には、大量のascファイルにファイル自身の情報をヘッダとして書き込む作業をします。 そのために、ファイルの情報などを返すユーザー定義関数を作り、それを用いた一連の書き込み作業をマクロにして保存し、アドイン化してしまおうと考えました。 作業をマクロにしてアドイン化することはできるようになりましたが、肝心のユーザー定義関数を作るVBAが良くわかりません。 たとえば以下のように、ファイルの作成日時を返すユーザー定義関数を書いて標準モジュールに張ってみたのですが、上手く動きませんでした(具体的には”#VALUE!”になる)。 Function CreationDate() CreationDate = ActiveWorkbook.BuiltinDocumentProperties("Creation Date").Value End Function 次の、ファイルの名前を返すユーザー定義関数は上手く動きました。 Function FileName() As String FileName = Application.ActiveWorkbook.Name End Function なぜ後者が動いて前者が動かないのか、よく理解できません。 どのように変えればよいのか、教えていただけないでしょうか? よろしくお願いします。

専門家に質問してみよう