• ベストアンサー

他のBookのユーザー定義関数を使う

例えばExcelでA.xlsというファイルのVBAでユーザー定義関数を作って、他のB.xlsというBook内でも使いたいという場合はどうしたらよいのでしょう。また、それはLAN上の別のコンピュータでも出来るでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

personal.xls(個人用マクロファイル)に登録すれば、 ログインした状態のすべてのエクセルで有効になります。 personal.xlsをLAN上で使わせたい場合は「ツール」「オプション」「全般」の 「Xlstart代替フォルダ名」をLAN上のフォルダにして そこにpersonal.xlsを貼り付けてください。 「Xlstart代替フォルダ名」の設定は使用する全員が行う必要があります。 もしくはA.xlsのマクロをコピーしてB.xlsに貼り付ける形になります。 アドイン化する方法もあるのですが私もやり方を知りません。 他の人にお任せします。

souta_n
質問者

お礼

返事が遅れました。すみません。 3人の方に回答をいただきましたが、職場でマクロとかあまり知らない人にも使わせる関数ですから、一番しっくりくる回答でした。ありがとうございます。 ちなみに回答いただいた方法は、FOM出版の「よくわかるトレーニング Excel2000 (3)(マクロ/VBA入門編)」の15ページに載ってました。本を斜め読みせず、ちゃんと読まないとだめだなぁと思いました。

その他の回答 (2)

回答No.3

インポート・エクスポートを使う方法を説明します。 A.xlsのユーザー定義関数の記録してあるモジュールを開きます。 「ファイル」?>「エクスポート」を選びます。 適当な名前をつけて保存します。 たとえばhoge.bas B.xlsを開いてVBAの編集画面をだします。 「ファイル」?>「インポート」を選びます。 hobe.basを選びます。 これでモジュールとして追加されて使えるようになります。 他のコンピュータで使いたいときは なるべくわかりやすい(フォルダーに)ところに エクスポート(保存)して、他のコンピュータから 同じようにインポートすればできます。 もちろんfloppyなどの媒体にエクスポートすれば その媒体を渡すことによってできるようになります。

souta_n
質問者

お礼

回答ありがとうございます。 従来わたしもこの方法を使用していたのですが、社内の他の職員にVBEを使わなくても定義関数が使えるようにという事が質問の目的でしたので・・・ポイント無くてごめんなさい。今後もよろしくお願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

他ブックのユーザー定義関数を使う例です。(必要なものを必要な時に使えるようにします。) ●前提として、A.xls に ユーザー定義関数『fnc_A』を書きます。 (この例は、引数2つを加算するだけです。)   Function fnc_A(x As Integer, y As Integer)     fnc_A = x + y   End Function   次に、ツール→VBAProjectのプロパティで、   全般タブのプロジェクト名に例として『A_Project』と入力してダイアログを閉じます。   Book『A.xls』を閉じます。    ●新しいBookか既存のBook(B.xlsとします)で、A.xlsのfnc_Aを使えるようにします。 B.xlsのVBE画面で、ツール→参照設定で参照ボタンを押して、 ファイルの種類を、Microsoft Excel Files にして、A.xlsを探して設定します。 これで、参照可能なライブラリファイルに『A_Project』が追加されるはずです。 ●上記設定が済んだら、B.xlsのシートで、A.xlsのユーザー定義関数が使えるように  なっているはずです。   (当方、Excel2000で上記はできています) >また、それはLAN上の別のコンピュータでも出来るでしょうか。 今、ネットワーク環境にないので断言はできませんが、できないはずはないと思います。 会社でも行った記憶があります。(不確かですが・・・) 以上、ご参考に。

souta_n
質問者

お礼

ははぁ~。こんな方法もあるのですね。 先の方のお礼で記載したように、私じゃなくて社内のマクロとか知らない人にも使ってもらえる様にという目的ですから、VBEから参照設定させるという行為はちょっと辛そうです。VBE見たら「なんじゃこらぁ!」と太陽にほえろの松田優作状態になる人もいますんで・・・ でもこの方法は私的には十分参考になりました。ありがとうございます。

関連するQ&A

  • エクセルのユーザー定義関数呼び出し方法

    エクセルでユーザー定義関数を作成し personal.xls に登録しておいても,関数名だけでは#NAME?エラーとなり呼び出せません.personal.xls!関数名() と入力すれば呼び出せますが,スマートではありません.作成した関数を複数のブックから使いたい場合,関数名だけで呼び出せる方法がないでしょうか.

  • ■ 他のブックのセル値を取り込むことは可能ですか?

    マクロで他のブックの特定のセルの値を取り込むことは可能ですか? 例えば、今A.xls B.xlsという2つのエクセルファイルを開いていまして、A.xlsの A4 の値を B.xls の G8 に入れたいのですが・・・。 説明分かりにくかったでしょうか? もしお分かりになった方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

  • Changeイベントの途中にユーザー定義関数が入る

    Excel VBA勉強中のものです ○"A1"に数字を入力する →Worksheet_Changeイベント →"B1"~"B5"にそれぞれ結果が入る →"C1"にユーザー定義関数 =A(B5)がある みたいなことをしようとしているのですが、 やってみると、 ○"A1"に数字を入力する →Worksheet_Changeイベント →Worksheet_Changeイベントの"B1"(1つ目の結果)がでるところで →ユーザー定義関数 Function Aにとぶ →普通にEnd Function →そのまま終了(End subに行かない) となるのですが、Worksheet_Changeに戻って来ないものなのでしょうか? また、Worksheet_Changeの最初のところに Application.EnableEvents = Falseで他のイベントを発生させないように?はしているのですが、終わるまでユーザー定義関数を発生させない命令みたいなのってあるのでしょうか? 上には少なく書いてありますが、実際はたくさんのセルを使用しておりWorksheet_Changeだけだとかなりの長文になりそうで、後半はユーザー定義関数にしたのですが 根本的に考え方が間違っているのでしょうか? なにかいいアドバイスをお願いします。

  • 自作関数とユーザー定義関数は同じ意味?

    エクセルやVBAの用語として出てくる 「自作関数」「ユーザー定義関数」は同じ意味ですか?

  • ユーザー定義関数について質問します。

    他社からもらったエクセルファイルにユーザー定義関数が埋め込まれていました。 これが非常に使いやすく便利なのです。しかし、一部を修正したいところがあるのですが「ユーザー定義関数」について知識がありません。 勉強しようと思ってますが、とりあえずこの関数の定義内容を見てみたいのですが、どうすれば中身が確認できますか? アドイン関数ではないので関数の定義は当ファイル内にあるはずです。 よろしくお願いします。

  • 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 は 取得できますが パス名とブック名はどうしたらよいのでしょうか? 根本的に違う方法がある? どなたか方法をご教授願います。

  • Excelで他のブックのセルを参照したいのですが

    コンボボックスにセットする値を、 VBAで他のブックを参照してセットしたいと思っています。 ブックAのシート1にコンボボックスを作り、 ブックBのシート1から取得しようと考えています。 ブックBのシート1には、あらかじめ「範囲A」の名前を定義して この範囲の値を参照するつもりです。 ただ同じフォルダ内にブックBを置いていれば参照できるのですが、 他のフォルダにブックBを置くと参照されません。 <同じフォルダにブックBを置いた場合>○参照できた ComboBox1.ListFillRange = "[ブックB.xls]シート1!範囲A" <他のフォルダにブックBを置いた場合>×参照されない ComboBox1.ListFillRange = "C:\[ブックB.xls]シート1!範囲A" 記述の仕方がおかしいのでしょうか? 宜しければご教授お願い致します。

  • Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい

    Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい A.xls B.xls と二つのブックがあります。 A.xlsが閉じられる時、B.xlsも同時に閉じたいです。 A.xlsに以下のマクロを入れました。 Private?Sub?Workbook_BeforeClose(Cancel?As?Boolean) ?Workbooks("B.xls").Close?SaveChanges:=False End?Sub 問題はA.xlsが保存してない場合、「A.xlsへの変更を保存しますか?」というメッセー ジが 出てきますが、そこでキャンセルを押された場合でもB.xlsが閉じられてしまいます。 A.xlsが本当に閉じられた時だけB.xlsを閉じたいのですが そのようなことは可能でしょうか?

  • 書式ごとコピーするユーザー定義関数をつくりたい

    VBA初心者です。 ExcelにてVBAを使用し、書式ごとコピーができるユーザー定義関数の作成を考えております。 理想としては例えば、A1に =GetTxt(INDIRECT("G"&B1)) と入力すれば、B1の値に応じてG列の任意の行のセルを引数として指定でき、 指定先のセルを書式ごとA1にコピーできるGetTxt()関数を定義したいのですが、 具体的にどのようにFunctionプロージャを記述すればいいでしょうか? (コピー元のセルをB1に入力する値に応じて随時自動で変えたいと考えております) 単純に値を返すだけのVBAコードならわかるのですが、 ワークシート上で関数として使用でき、かつ書式なども指定する方法がわかりません。 もしワークシート上での関数としての実行が困難であれば代替案でも構いませんので、 宜しければ何卒ご教示お願い申し上げます。

  • ユーザー定義関数 アドイン

    ユーザー定義関数をアドインにどうやって保存するのでしょか? また、ユーザー定義関数以外のVBAをアドインに保存できますか?

専門家に質問してみよう