トップページに戻る
注:
- VBA (マクロ)
が入ったファイルは、拡張子 .xlsm
で保存する必要があります。
- アドインは .xlam で保存します。
ExcelでVBAを使う準備
「開発」タブを表示する
- Excelを開き、任意のブックを新規作成するか、既存のブックを開く。
- リボンの「ファイル」タブ =>
「オプション」メニューを選択します。
- 「Excelの基本オプション」ダイアログボックスが表示されたら、「リボンのユーザー設定」をクリック。
- 右側の「リボンのユーザー設定」欄で、「開発」チェックボックスをオンにする。
- 「OK」ボタンをクリックしてダイアログボックスを閉じる。
「開発」タブがリボンに表示されていることを確認。
VBAエディターでコードを作成する
- 「開発」タブ => 「Visual
Basic」ボタンをクリック。
- VBAエディターが開くので、「挿入」メニューから「モジュール」を選択。
- 新しく作成したモジュールに以下のコードを入力。
Sub HelloWorld()
MsgBox "Hello, World!"
End Sub
- VBAエディターを閉じ、Excelに戻る。
- 「開発」タブ => 「マクロ」をクリック
(あるいはAlt + F8)
し、「マクロ」ダイアログボックスを開く。
「HelloWorld」を選択して「実行」ボタンをクリックして実行
Excelにボタンを追加してVBAを実行する
注:
設定でマクロを有効にする必要があります。セキュリティリスクがありますので、注意してください
- 「ファイル」 => 「オプション」 を開く
- 「セキュリティセンター」 =>
「セキュリティセンターの設定」 をクリック
- 「マクロの設定」
「すべてのマクロを有効にする」 に変更
「VBAプロジェクト オブジェクト
モデルへのアクセスを信頼する」にチェック
- Excelを再起動
フォームコントロールのボタンを追加
- 「開発」タブ => 「デザインモード」
を押して、デザインモードに入る
- 「挿入」ボタン をクリック
- 「フォームコントロール」 => 「ボタン」を選択し、
シート上でドラッグしてボタンを配置
- 「マクロの登録」ダイアログが表示されるので、
新規作成 (あるいは既存マクロを選択)
VBAコードを入力
- VBAエディタが開くので、以下のコードを入力
Sub RunMacro()
MsgBox "ボタンがクリックされました!"
End Sub
- 保存ボタンあるいはCtrl+Sで保存
- VBAエディタを閉じる
- OKボタンを押してダイアログを閉じる
- デザインモードボタンを押し、デザインモードを抜ける
実行
- ボタンをクリック
登録マクロの変更
- ボタン上でマウスの右ボタンをクリック
- 「マクロの登録」を選択
外部ファイルのVBAを使う方法
以下のような方法で実現できます。
(i) 外部ファイルをインポート
注: 「信頼できる VBA プロジェクト オブジェクト モデルへのアクセスを許可する」
を有効にすること
- Sub ImportModule()
Dim vbProj As Object
Set vbProj = ThisWorkbook.VBProject
vbProj.VBComponents.Import "\path\to\module.bas"
End Sub
(ii) 外部ファイルのVBAを実行
- Sub RunMacroFromAnotherWorkbook()
Dim wb As Workbook
Set wb = Workbooks.Open("\path\to\otherWorkbook.xlsm")
Application.Run "otherWorkbook.xlsm!MacroName"
wb.Close False ' 保存せずに閉じる
End Sub
(iii) アドインを使う
- 他のファイルを アドイン(.xlam) にして保存する
- Excelで アドインを有効化 する
- Application.Run "AddInName.xlam!MacroName" でマクロを実行
(iv) ライブラリ化 (参照設定)
- VBAエディタ(VBE) で 「ツール」 → 「参照設定」
を開く
- 他のExcelファイルを ライブラリとして追加 する。
含まれているVBA関数を直接呼び出せる。
- Sub RunVBAFromLibrary()
Dim obj As New MyLibrary.Module1
Call obj.MySub
End Sub
(v) 外部スクリプト (VBS) を実行する
(2024年に廃止されたので非推奨)
- 以下を、test.vbsに保存する
Dim objExcel, objWorkbook
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\path\to\otherWorkbook.xlsm")
objExcel.Application.Run "otherWorkbook.xlsm!MacroName"
objWorkbook.Close False
objExcel.Quit
- 実行する
> cscript test.vbs
(vi) PowerShellで実行する
- 以下をtest.ps1として保存
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false # Excelを非表示
$workbook = $excel.Workbooks.Open("C:\Users\YourName\Documents\test.xlsm")
$excel.Run("MyMacro") # 実行するマクロ名
$workbook.Close($false) # 保存せずに閉じる
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
- 実行
> powershell -ExecutionPolicy Bypass -File "test.ps1"