• 締切済み

EXCEL・VBAに関して

或るブックで定義した「ユーザ定義関数」を,VBAでシートを別のブックにコピーするのと同時にそのブックにコピーすることは可能でしょうか? 後、一連のブックをグループ分けのようなことをして、そのグループ内では共通して使えるようには出来ますか。そうすればコピーする必要は無いように思うのですが。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1です。 下記が、どの様な操作あるいはVBAでの処理をされたのか、意味を掴みかねます。 具体的な例等、補足説明していただけますか。 >使用するユーザ定義関数の参照元に、VBAで値を入れた≪別シートからのコピーをした≫ >ところ、「#name?」エラーが起こり上手くいきません。 ご参考に、URLを一つ添付いたします。 http://support.microsoft.com/kb/291058/ja

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 アドインは、任意のフォルダーに置いて使用できる様です。 また、アドインの参照とインストールは、マクロの自動記録で記録されます。 MyDocumentsに置いてもらって、アドインをインストールするVBAプロシージャ中で環境に応じたMyDocumentsを取得して処理するとか、あるいはC:\hogeといった分かり易いフォルダに入れてもらう取り決めをする等が考えられます。 当方で自動記録した結果+αは下記の様なものでした。 AddIns.Add Filename:= _ "C:\Documents and Settings\hoge\デスクトップ\userFuncAddin.xla" AddIns("Userfuncaddin").Installed = True ご参考まで。

kichi4182
質問者

補足

ありがとうございます。 すみません。Addinにして、規定フォルダにコピーし、使用出来るように設定したのですが、使用するユーザ定義関数の参照元に、VBAで値を入れた≪別シートからのコピーをした≫ところ、「#name?」エラーが起こり上手くいきません。 勿論、コピー前のブック・シートでは、正常な動作であることを確認済みです。 よろしくお願いします。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

アドインにするのが良いと思います。 例えば、新規ブックの標準モジュールに下記の様な関数を定義して、ファイル/名前をつけて保存で、アドイン(.xla)形式で保存します。 その後で、ツール/アドイン/参照でそのファイルを選択すると、アドインがインストールされます。 以後、そのPCでは、下記ユーザー定義関数が全てのブックで使用できます。他のPCで使用したい場合は、そのアドインファイルを所定のフォルダーにコピーした後、インストールすれば同様に使用できます。 詳細は参考URLをご覧下さい。但し、上記記述も、参考記事もxl2003以前のバージョンが対象です。http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html 参考URLのリンク先に、当方使ってみた事は無いですが、ブック・テンプレートにユーザー定義関数を組み込む方法も載っています。 Function mySum(ParamArray args()) As Variant Dim i As Long Dim buf As Double On Error GoTo errHandle For i = LBound(args) To UBound(args) buf = buf + CDbl(args(i)) Next i mySum = buf Exit Function errHandle: mySum = CVErr(xlErrValue) End Function

kichi4182
質問者

お礼

ありがとうございます。

kichi4182
質問者

補足

調べてみましたら、所定のフォルダに保存すると自動的にaddinとして読み込まれるそうですが、PCにより、また、アカウントにより、「所定のフォルダ」へのフルパスが違うので、開発中のシステムを使用予定のPC全部にaddinファイルをコピーし、Excel上で有効にしないといけないようなのですが、これを自動でやる方法は無いですか? Windows の環境変数をExcel上のVBAに取り込めたら、ファイルのコピーだけでも自動で出来、便利だと思うのですが。

関連するQ&A

  • EXCEL  VBA シートコピー、名前変更他

    EXCEL  VBA (1)シートコピー、名前変更 (2)他の固定のbookへ転送をVBAで記述 book1のsheet1を開き、そのsheetをコピーしたものをABCというsheet名に替え、 それをbook2のsheetの後ろへ移動するというマクロをPersonalに作ろうとしていますが、 インデックスエラーとか【アプリケーション定義または、オブジェクト定義のエラー】とかインデックスエラーとか になります。 book1のsheet1とかは、マクロを使う場合は、固定的な名前でなくいろいろそのときどきでかわる名前ですが、 マクロを使って、そのsheetをコピーしたものをABCとしてbook2のsheetの後ろへ移動したいということです。 よろしくお願いします。

  • 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()となっています。 この問題を解決する方法がないでしょうか。よろしくお願いいたします。

  • EXCEL VBA(作業グループの解除)

    EXCEL VBAについての質問です。 複数のシートをコピーして別ブックに保存した後、元のブックが作業グループになってしまいます。 これを解除するコードを伝授いただけませんでしょうか? Sheets(Array("1", "2", "3")).Select Sheets(Array("1", "2", "3")).Copy

  • EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

     EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法  普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

  • VBAでのコピーについてです。

     いつもお世話になっております。VBA初心者です。  シート全体の内容(データ)を別ブックのシートにコピーしたいのです。しかも、別ブックのシートにはデータがあるので、そのデータ下の行(例えば(20,A))から貼り付けたいのです。  いろいろと調べたのですが、やり方がわかりません。 よろしくお願いいたします。

  • エクセルVBAで質問です

    あるブックのシートに入力するようにしています。そこには関数や、 リストなどさまざまな設定がされています。そのブックにコードを書いてマクロ実行ボタンもそのシートに付けたいと思っています。 このシートをデスクトップにコピーして別ブックとして作成したいのですが、コードを教えていただけないでしょうか。できるかわかりませんが、関数が設定されてある箇所は関数としてではなく、値としてコピーされると都合がいいです。 また、作成されたブック(コピーしたシート)には、マクロのボタンなんかが残らない形ではできないものでしょうか?

  • Excel2007で2003のVBAが実行時エラー1004

    普段は事務員の非プログラマーです。 Excel2000,2003で動いていたマクロを2007でも動くようにしてほしいと言われて頑張っているのですが、どうすればいいのか見当がつきません(*_*) どうぞ知識者の皆様のお知恵をお貸しください。 Excel2003で読み取りのみのVBAのファイルで、ボタンを押すとマクロが実行され、別CSVファイルを指定しVBAのファイルの別シートとして読み込みます。次に別txtファイルを指定してVBAのファイルの別シートに読み込みます。最後にその2つのシートの必要な個所のみ結合して、新しいcsvファイルとして保存する処理をしています。 Excel2007でこれを実行すると、csvファイルを読み込むときに次のようなエラーがでます。 「実行時エラー'1004':移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー]コマンドと[貼り付け]コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 マクロの中身はこのような感じです。 エラーは最終行の「ActiveSheet~」ででています。 Sub openExcel() 'Step1 open excel Dim ExcelFileOpen As String ExcelFileOpen = Application.GetOpenFilename(FileFilter:="Excel Files,*.csv") If ExcelFileOpen <> "False" Then Workbooks.OpenText Filename:=ExcelFileOpen ActiveSheet.Move After:=Workbooks(ThisWorkbook.Name).Sheets(1) どうぞよろしくお願いいたします(_ _)

  • VBAの構文をお願いします Excelです

    宜しくお願いいたします。 Rigth関数をVBAで行うときの構文教えてください。 Sheet1のA1セルに123456があります、Sheet2のA1セルに右から2つすなわち56をコピーするにはどのように構文すればよいのですか。Lefe、Midもこれが分かればできると思います。

  • VBAについて教えて下さい

    VBAでBOOKを選択して選択したBOOKの開いたシートを作業中のBOOKにあるSheet3へコピーして開いたBOOKを閉じるプログラムを教えて下さい。

  • 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 なぜ後者が動いて前者が動かないのか、よく理解できません。 どのように変えればよいのか、教えていただけないでしょうか? よろしくお願いします。

専門家に質問してみよう