タイダログ

もっと怠けますか? (y/n)

GitHub からダウンロードした VBA モジュールをインポートする手順

VBA で便利なものを作ったよ。GitHub に上げといたから、モジュールをダウンロードしてインポートして使ってね」と人に言う場合、注意すべき点がいくつかあります。

  • VBA モジュールのインポートは敷居が高い
  • 自分で便利って言ったらハードルが上がる

経験のない人が「モジュールのインポート」なんて聞いたら、その時点で挫折してしまうかもしれません。夢破れたり。

というわけで、一連の流れをまとめておこうと思った次第です。「GitHub からダウンロードしてインポートしてね」と言う予定のある方、あるいは言われた方のお役に立ちますように。

実行環境

「はじめからモジュールをインポートした状態で配布してくれよ」というごもっともなお声

そもそもモジュールというのは、マクロのコードが書いてあるファイルのことです。ワークシート(セルがたくさんあるやつ)とは別になっていて、Excel ファイルから分離させて単体で配布することができます。

モジュールのインポートというのは、分離させたモジュールを再び Excel ファイルにくっ付ける作業です。

つまり、今読者のみなさんは、わざわざ切り離したモジュールファイルをくっ付けなおすという目に遭っているわけです。コメディー。
はじめからマクロ付きの状態で配布してくれというお声はごもっともです、はい。しかしこちらにも様々な事情がありまして……

プログラムを書く際、変更履歴を残しておくことが重要になります。こうすることで、もしも上手くいかなくなっても簡単にやり直せるからです。その変更履歴を記録する仕組みとして GIt や GitHub というものを使うのですが、そこでは Excel ファイルそのものを管理できません。ですので、モジュールだけを分離して、Excel ファイルとは別に扱っているのです。

また、セキュリティの観点からも、マクロ付きファイルのダウンロードは推奨できないのです。

そんなわけで、モジュールをインポートしてみましょう!

流れ

  1. 準備
    1. 拡張子を表示する
  2. ダウンロード
    1. ZIP ファイルをダウンロードする
    2. ZIP ファイルを展開する
  3. インポート
    1. Excel ファイルを開く
    2. 開発タブを表示する
    3. VBE を開く
    4. モジュールをインポートする
    5. 保存する

準備

拡張子を表示する

まずは事前準備です。今回の作業をするにあたって、フォルダ上でファイルの拡張子を表示するように設定しましょう。

拡張子というのは、とてもざっくり言うと、ファイルの種類を表す目印です。.xlsx.docx.pdf.jpg.ps1 のような「ドットなんとか」の形で、様々な種類があります。適当なフォルダを開いてファイル名を眺めたときにすでに末尾に付いていれば、この準備は不要です。付いていない場合は、次の手順で表示してください。

  1. 適当なフォルダを開く
  2. [表示] タブを開く
  3. [表示/非表示] グループの [ファイル名拡張子] にチェックを入れる

拡張子を表示する

ファイル名の末尾に拡張子が付いたことを確認してください。一度設定すると、全てのフォルダで拡張子が表示されます。

ダウンロード

ZIP ファイルをダウンロードする

VBA モジュールをダウンロードしましょう。「GitHub からダウンロードしてね」と言われたときに、ダウンロードページの URL をもらったはずです。そのページに行きましょう。

以下のように、https://github.com/<アカウント名>/<プロダクト名> の URL の場合は、そのプロダクトのトップページが開きます。
https://github.com/taidalog/X2P-QuizMaker

この場合は、緑の "Code" ボタンをクリックして "Download ZIP" からダウンロードしましょう。

"Code" > "Download ZIP"

一方、以下のように、https://github.com/<アカウント名>/<プロダクト名>/releases の URL の場合は、そのプロダクトの、バージョンごとのダウンロードページが開きます。
https://github.com/taidalog/X2P-QuizMaker/releases

この場合は、最新バージョンの枠内の "Source code (zip)" をクリックしてダウンロードしましょう。

"Source code (zip)"

ZIP ファイルを展開する

ダウンロードしたら、その ZIP ファイルを展開(解凍)してください。その中の、拡張子が .bas のファイルが VBA モジュールです。

展開した ZIP ファイルの中身

インポート

では本命のインポートです。

Excel ファイルを開く

モジュールをインポートする Excel ファイルを開いてください。それ以外の Excel ファイルは閉じておくことをおすすめします(理由は後述)。

開発タブを表示する

次に、[開発] タブを表示します。[開発] タブというのは、マクロを作る上で使う機能が詰まったタブです。

[ファイル] タブ > [オプション] タブの順でクリックします。

[ファイル] タブ

[オプション] タブ

[Excel のオプション] ダイアログが開いたら、[リボンのユーザー設定] の [メイン タブ] で「開発」にチェックを入れて [OK] をクリックします。

[Excel のオプション] ダイアログ

[開発] タブを表示できました。

[開発] タブを表示できた

VBE を開く

[開発] タブから VBE を開きます。VBE というのは、マクロの編集などを行う画面のことです。

[開発] タブから VBE を開く

実は VBE は Alt + F11 で開けるのですが、それ以外の機能も詰まっているので、[開発] タブは是非表示してください。

モジュールをインポートする

VBE の左上に、現在開いている Excel ファイルが並んでいます。

VBE の左上、現在開いている Excel ファイル

複数開いていると、この欄にファイルが複数並んで訳がわからなくなるので、前述の通り使わないファイルは閉じておきましょう。

インポートする Excel ファイルを右クリックして「ファイルのインポート(I)...」をクリックしてください。

右クリック > ファイルのインポート

ファイルの選択ダイアログで、先程ダウンロードして展開したモジュールファイル (.bas) を選択し、[開く(O)] をクリックしてください。
インポートするモジュールが複数ある場合は、この操作を繰り返してください。

インポートするモジュールの選択

インポートしたら、「標準モジュール」というものが出現します(既にファイルにマクロが入っていた場合は、はじめからあったはずです)。

インポート後、「標準モジュール」が出現

「標準モジュール」をダブルクリックするか、その左端の「+」をクリックして開くと、モジュールファイル (.bas) と同じ名前(この場合は "main")のものがあるはずです。そうなっていればインポート成功です! おめでとうございます!

せっかくですので、これをダブルクリックして開きましょう。

インポートしたモジュールを開く

パスワードがかかっていなければコードを見られます。かかっていたら諦めてください。

最後に保存したらおしまいなのですが、注意点があります。このまま読み進めてください。

保存する

モジュールをインポートした Excel ファイルの拡張子によって、保存の仕方が変わってきます。ここで間違えると、せっかくインポートしたモジュールが消えて今度こそ心が折れます。最後までお気を付けて。

  • .xlsm または .xlam
    そのまま上書き保存してください。
    元々マクロが入っているので、ファイルがマクロに対応しています。
  • .xlsx
    名前を付けて保存で「Excel マクロ有効ブック(*.xlsm)」を選択してください。.xlsm ファイルとして保存したら、今後はその .xlsm の方を使ってください。
    Excel マクロ有効ブック(*.xlsm)」として保存
    Excel マクロ有効ブック(*.xlsm)」に変更せず、.xlsx のままで上書き保存しようとすると、以下の画面が出ます。「はい(Y)」を選択するとインポートしたモジュールが消えます。「いいえ(N)」を選択すると、名前を付けて保存の画面になります。
    .xlsx のまま上書き保存しようとしたときの警告画面
  • .xls
    このままでもマクロを保存できるのですが、.xls ファイルはウィルスの感染経路として悪用されやすいので、.xlsm として保存しなおしてほしいと思います。
    .xlsx と同じ手順で名前を付けて保存してください。
  • 新規ファイル(=まだ一度も保存したことがない)
    名前を付けて保存で「Excel マクロ有効ブック(*.xlsm)」を選択してください。

ThisWorkbook モジュールを編集

モジュールのインポートの他に、ThisWorkbook モジュールも編集するように言われる場合もあります。拙作ですとSuwarinX2P-QuizMakerで必要になります。以下に手順を示しますので、どうか最後まで諦めずに頑張ってください。

VBE で、編集したいファイルの ThisWorkbook モジュールをダブルクリックして開いてください。白紙かもしれませんし、すでに何か書いてあるかもしれません。

ThisWorkbook モジュール

必要に応じて編集してください。たとえば、以下のコードを追加する場合、

Private Sub Workbook_Open()
    Call AddToContextMenu
End Sub

ごく普通にコードをコピーして貼り付けるだけでいいです。もしも既にコードが入っていた場合は、それより下に貼り付けてください。

コードを入力

Private Sub <...>()<...> の部分が同じコードが既に入っていた場合、基本的に以下のようにしたらいいと思うのですが……コードによってどうなるかわかりませんので、「インポートして使ってね」って言ってきた人に聞いてください。

↓これを貼り付けようと思ったけど

Private Sub Workbook_Open()
    Call AddToContextMenu
End Sub

Private Sub Workbook_Open() が既にあった場合、

Private Sub Workbook_Open()
    ThisWorkbook.Worksheets(1).Select
    ThisWorkbook.Worksheets(1).Cells(1, 1).Select
End Sub

End Sub の前に追加すればいいと思われます。

Private Sub Workbook_Open()
    ThisWorkbook.Worksheets(1).Select ' 元からあったコード
    ThisWorkbook.Worksheets(1).Cells(1, 1).Select ' 元からあったコード
    Call AddToContextMenu ' 追加したコード
End Sub

↓こうするとエラーが出ます。

Private Sub Workbook_Open()
    ThisWorkbook.Worksheets(1).Select
    ThisWorkbook.Worksheets(1).Cells(1, 1).Select
End Sub

Private Sub Workbook_Open()
    Call AddToContextMenu
End Sub

編集し終わったら保存してください。

結び

モジュールのインポートって慣れないと難しいですよね。また、Git や GitHub でバージョン管理するのも、いちいちエクスポートするのがめんどうです。この機に PowerShell を始めてみてはいかがでしょうか!

taidalog.hatenablog.com

F# も面白いですよ!

taidalog.hatenablog.com

変更履歴