個人用マクロブック と XLStartフォルダ Macユーザー向け Excel VBA 入門 [09] Excel2019 for Mac

20211014_04.png(s320)

[09] 個人用マクロブック(PERSONAL.XLSB) と 「スタートアップ(XLStart)」フォルダ 、作成した「ユーザー定義関数」を他のブックから呼び出す方法を説明!

個人用マクロブック(PERSONAL.XLSB)の作成
デフォルトの「スタートアップ(XLStart)」フォルダの場所
「代替スタートアップ フォルダー」として OneDrive内を指定すると、複数の Mac(Book) で「スタートアップフォルダ」を共有可能
作成した「ユーザー定義関数」を他のブックから呼び出す方法
ブックの非表示とブックの再表示

(注) 他ブックのプロシージャのため、VBAコードもワークシートも呼び出しが少し面倒に!




 【準備】Macユーザー向け Excel VBA 入門 [09] 個人用マクロブック と XLStartフォルダ 

 Microsoft365(サブスク)の場合 まず、Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。

  前々回  使用した XLSM ファイルを、「マクロを有効」にして開きます。

 永続版(買い切り)の「Office2021」が2021年10月にリリースされましたが、「サブスクの Microsoft365 」との違いをよく理解していないため(筆者が理解次第)お伝えします!
 当連載は 公開開始日(更新日でない)時点で、「最新の Microsoft365(サブスク)」を利用して動作確認を行い 記事にまとめています。 永続版の「Office2019」や「Office2021」を利用して動作確認ができないため、(画面を含め)異なる結果になる場合があるかもしれません。
 その場合、コメント や Twitter で教えて頂けると助かります。 Windows11連携のため Microsoft365とOffice2021のUIが一新! Windowsd11のデザインに合わせたカラーパレットの使用に加えてライトモード/ダークモードの変更など Windows11と同様になったそうで、Mac版利用の当連載でもダークモード画面を貼り付けています。


 Macユーザー向け Excel VBA 入門 [09] 個人用マクロブック と XLStartフォルダ 

 個人用マクロブック(PERSONAL.XLSB)の作成 

20211014_01.png

 [開発]リボンにて [マクロの記録] を行う際、ダイアログの「 マクロの保存先に "個人用マクロブック" 」を指定すると、個人用マクロブック(PERSONAL.XLSB)が作成される。
(例えば)適当なセルを選択して、 [記録終了] ボタンを押し マクロの記録を終了。

20211014_02.png

 次に、[option (alt) ]+[F11]にて VBE (Visual Basic Editor) ウィンドウを表示。

20211014_03.png

 VBEウィンドウ左側の [プロジェクト エクスプローラー] 一番上の「 VBAProject (PERSONAL.XLSB) 」左の ➕ をクリックして開き、同様の操作で「モジュール」を開き、その直後に表示される Module1 上でダブルクリックすると、コード ウィンドウ内に 先程の操作の VBEコードが表示される。(通常、「PERSONAL.XLSB - Module1 (コード) 」ウィンドウが開く)

 VBAProject はExcelファイル毎に作成されるオブジェクトのため、元々開いたファイル(サンプルだと、"Test_Book3.xlsm" )とは別プロジェクトの Module1 が作成される事に注目。

20211014_04.png

 VBEウィンドウ選択状態にて [command] + Q を入力し、VBEウィンドウを終了。 次に Excel 画面選択状態にて [command] + Q を入力し Excel自体を終了しようとすると 上記「ファイルの保存」ダイアログが表示されるため、[保存] をクリック!
 当操作で、個人用マクロブック(PERSONAL.XLSB) が ローカルPC上の Excel「スタートアップ」フォルダ内に保存される。 以降、Excelを起動すると ウィンドウ非表示状態で PERSONAL.XLSB ブックが最初に開かれる ため、その後に Excelファイルを開くか 新規作成。

 「スタートアップ」フォルダ内に格納したExcelファイルは、Excel を起動すると最初に自動的に読み込まれ、ブック単位でウィンドウが表示されます。 フォルダ内の「個人用マクロブック」のみ、通常「非表示」状態で読み込まれます。


 デフォルトの「スタートアップ(XLStart)」フォルダの場所と「代替スタートアップ フォルダー」 

  Windows版 スタートアップフォルダ に関して  

 Mac版 デフォルトの「スタートアップ(XLStart)」フォルダの場所は、Excel2016 以降 /Users/xxxxx/Library/Group Containers/UBF8T346G9.Office/ユーザー コンテンツ/スタートアップ/Excel です。( Microsoft365サブスク契約の場合は Excel2016相当 以降 )
(注) /Users/xxxxx/ はホームフォルダを示し、正式なPOSIXパスは /Users/xxxxx/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Startup.localized/Excel/
 "Finder" 上で [shift]+[command]+L にて「ライブラリ」を表示できるため、"Group Containers" 以降 順に階層を辿れます。(このMac上で、 PERSONAL.XLSB を検索した方が早いかもしれません)

 「代替スタートアップ フォルダー」として 任意のフォルダを指定することもでき、 OneDrive 内のフォルダも指定可能なため 複数の Mac(Book) から「代替スタートアップ フォルダー」を共用できます。
 筆者は OneDrive 内に「ドキュメント」-「XLStart」フォルダを作成して、指定済み。 Windows版と同じ分かり易いフォルダ名にしただけで、「XLStart」以外のフォルダ名でもかまいません。

 以降、「代替スタートアップ フォルダー」に OneDrive 内のフォルダを指定したパターンで説明を続けますが、(デフォルト、あるいは OneDrive 以外の場所でも)「スタートアップフォルダ」の場所と「個人用マクロブック名」が異なるだけで できることは同じです。

20211014_05.png

 下記 PERSONAL.XLSB を "Finder" 上で操作する作業は、Excel を終了した状態で行う必要あり!
 上記画面のように OneDrive 内のフォルダを「代替スタートアップ フォルダー」として利用するため、上記「デフォルトのスタートアップフォルダ」内の PERSONAL.XLSB をコピー後に PERSONAL2.XLSB にリネーム。
 続いて、コピー元の PERSONAL.XLSB を削除 します。 このファイルを削除しても VBE(Excel)反映まで時間がかかる時があるため、リネームが必要。(8時間後に再実行したら、削除が反映されていた。 Macを再起動しても、即時反映されず。 同一ファイル名では Excel起動時の読み込みで片方のファイルしか読み込まれず、エラーが出る。)
 個人用マクロブックは 正式には「デフォルトのスタートアップフォルダ」内の PERSONAL.XLSB ファイルのみを指しますが、「代替スタートアップ フォルダー」内の拡張子 XLSB を持つファイルでも機能的に同等のため 以降「代替スタートアップ フォルダー」内の拡張子 XLSB を持つファイルも含めて便宜上 個人用マクロブック と呼ぶ事にします!

20211014_06.png

 Excel起動後、メニュー [Excel]-[環境設定...]-[全般]タブにて、「代替スタートアップ フォルダー」を指定! クリアも含め「代替スタートアップ フォルダー」を反映するには、Excelを終了後に再度 Excel を実行する必要あり。
 もちろん、ローカルPC上のフォルダも指定可能。 iCloud、Box、Dropboxなど「OneDrive 以外のクラウド上のサービス」も(POSIXパスとしてリンクできれば) 利用可能かもしれません。(試していないので、自己責任でお願いします。 ファイル転送速度も重要)

20211014_07.png

 上記画面のように [option (alt) ]+[F11] 等で VBE ウィンドウを起動し、「代替スタートアップ フォルダー」の反映を確認!
 PERSONAL.XLSB を削除 した場合、(時間はかかるかもしれませんが) VBE ウィンドウの「プロジェクト エクスプローラー」に表示されなくなります。



 作成した「ユーザー定義関数」を 他のブックから呼び出す方法 

 ( 「デフォルトの個人用マクロブック」利用時は、以降 PERSONAL2.XLSB の記述を PERSONAL.XLSB に置換して下さい )

 以下のVBAコードを PERSONAL2.XLSB の Module1 に追加!

Public Function MyFuncA(ByVal n As Integer) As Long
Rem 【Excel関数 FACT(n) 】を実装(VBAでもC言語みたいに再帰関数を記述可!)
Rem 【ExcelVBA の便利な所】は、自分で作成した関数をワークシートから呼び出せる点

    If n > 1 Then
        MyFuncA = n * MyFuncA(n - 1)
    Else
        MyFuncA = 1   ' (n <= 1) に対応するコードを誤ると、無限ループの可能性
    End If

End Function

Public Function MyFuncB(n As Integer) As Long
Rem 数式利用の場合、以下の1行のみで記述できます!
Rem MyFuncB = n * (n + 1) / 2

    Dim i As Integer
    Dim j As Integer

    j = 0

    For i = 1 To n Step 1
        j = j + i
    Next i

    MyFuncB = j

End Function

20211014_08.png

? Application.Run("PERSONAL2.XLSB!Module1.MyFuncA", 10) [return]
? Application.Run("PERSONAL2.XLSB!Module1.MyFuncB", 10) [return]

 イミディエイトウィンドウから動作確認で行う呼び出し方法が、(他ブックの関数を呼び出すため)ちょっとだけ難しくなっています。( ? は Debug.Print の省略形
 Application.Run という特別な命令を用い、ダブルコーテーション囲みで「Excelファイル名!モジュール名.プロシージャ名」を指定後に、引数を順に記述します。
値を返さないプロシージャの場合は、以下のようになります。(引数が文字列1つの場合)
 CALL Application.Run("PERSONAL2.XLSB!Module1.MySub1", "Parameter1")

20211014_09.png

 他ブックとなるため、ワークシートからの関数呼び出しも関数(プロシージャ)名の前に「Excelファイル名」を付けて修飾する必要があります。(区切りは、感嘆符)
他ブック内の関数のため補完は効かないので、 [E1] セルに間違いないように以下を入力します。
=PERSONAL2.XLSB!MyFuncB(A1)
同様に、 [F1] セルに間違いないように以下を入力します。
=PERSONAL2.XLSB!MyFuncA(A1)

 最後に [E1:F1] セルを選択し、[command]+C にてコピー

20211014_10.png

20211014_11.png

 ブックの非表示とブックの再表示 

20211014_12.png

 個人用マクロブック(スタートアップフォルダ内の PERSONAL.XLSB や 代替用スタートアップフォルダ内の PERSONAL2.XLSB )は Excel起動時に最初に開かれますが、「非表示」状態になっているだけで表示可能です。
 [表示]リボン の [再表示]ボタンをクリック後、ダイアログから再表示したいブックを選択すれば、選択ブックのウィンドウが「再表示」されます。

20211014_13.png

 このまま 個人用マクロブック を保存すると 次回のExcel起動時から毎回 個人用マクロブック が最初に表示されてしまうため、Excel終了前に必ず 個人用マクロブック を「非表示」に戻しましょう!
 個人用マクロブック を選択して [表示]リボン の [表示しない]ボタンをクリックすれば 個人用マクロブック が「非表示」に戻るため、この状態で 個人用マクロブックを保存 します。



 [command] + [Q] にてまず VBE を終了し、Excel のウィンドウ内を選択して [command] + [Q] にて Excel も終了させます。 「作業中のブック」を保存するか確認のダイアログ画面が表示された場合は 「保存」しましょう。 「自動保存」済みの場合、保存するかどうかの確認ダイアログ画面は表示されません。

 次回は、 アドイン を利用して Excel for Mac でもユーザー定義関数の呼び出しが簡単になるか 試してみる予定です。





広告
  




Macブログ ランキング アイコン
最後まで読んでいただき、ありがとうございます。 また、お越しくださいませ。
// アタル
For follow LINE Reader Group!Subscribe to this blog on Feedly!

Next Post Previous Post
No Comment
Add Comment
comment url