脱 Excel VBA

# 🏁 脱 Excel VBA

20年以上前 (Excel 2003) から進化せず VB6.0 のままで使われ続けてきた **VBA** (Visual Basic for Applications) 。今ではより安全で柔軟な代替技術が登場し、本格的に引退の時期が訪れているのではないでしょうか？

## 🚀 なぜ VBA から移行すべきなのか？

- VBA は **32-bit** 環境を前提としており、最新技術との互換性が限られている。
- **セキュリティリスク** が高まり、Microsoft も **VBA マクロをデフォルトでブロック** する方針を採用。
- **クラウド技術** との統合が難しく、オンライン環境での自動化が困難。
- **チーム開発** や長期的な運用が難しく、メンテナンス性に乏しい。

このような理由から、現代的な代替技術へ移行することを検討するべきです。

------

# 🛑 VBA マクロのデフォルトブロック

https://learn.microsoft.com/ja-jp/microsoft-365-apps/security/internet-macros-blocked

https://www.itmedia.co.jp/news/articles/2202/08/news070.html

Microsoft は、ネットからダウンロードされた Office ファイルの **VBA マクロをデフォルトでブロック** する方針を発表しました。これは [Emotet](https://www.itmedia.co.jp/news/articles/2202/07/news106.html) などのマルウェア対策の一環であり、企業の IT セキュリティにも大きな影響を与えました。

------

# 🏗️ Excel における VBA の代替

VBA を使わずに Excel の機能を活用する方法を紹介します。

## 📌 Excel 内で完結する処理

### ✨ [LAMBDA 関数][lambda]

カスタムの再利用可能な関数を作成し、それらを名前で呼び出せます。

https://forest.watch.impress.co.jp/docs/news/1387035.html

### 🔄 [Power Query][power-query]

ブック内のデータや外部データに接続し、変換、結合、整形が可能。

▶ **[【モダン Excel】Power Query について #PowerQuery - Qiita](https://qiita.com/MakotoIshikawa/items/839b8841bd99782a019e)**

https://support.microsoft.com/office/about-power-query-in-excel-7104fbee-9e62-4cb9-a02e-5bfb1a6c536a

<iframe width="560" height="315" src="https://www.youtube.com/embed/4N-OPrZcVb4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>

------

## 🌐 オンラインで使用する処理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/0c4e8e20-a442-4116-a4d5-5d7e500f48bf.png)

### 📝 [Office Scripts][office-scripts]

**Excel Online** で動作する **TypeScript** 言語スクリプト。組織全体で共有でき、ローカルアプリからも起動可能。

**Power Automate** との連携も可能。

https://docs.microsoft.com/ja-jp/office/dev/scripts/tutorials/excel-power-automate-manual

### ⚙️ [Power Automate][power-automate]

豊富な [コネクタ][connectors] を組み合わせ、処理を構成しタスクを自動化。

https://powerautomate.microsoft.com/

------

## 💻 Excel 外を操作する処理

### 🤖 [Power Automate for desktop][desktop]

デスクトップ上の繰り返し作業を自動化し、**RPA** を実現。

https://docs.microsoft.com/power-automate/desktop-flows/introduction

### 🛠️ [PowerShell][powershell-7]

UI を必要としない VBA マクロの処理は、PowerShell に移植すれば対応可能。

https://learn.microsoft.com/ja-jp/powershell/scripting/overview?view=powershell-7.5

------

## 🔍 その他

### 🐍 Python in Excel

::: note
追記 (2023/09/15)
:::

Excel 内で Python を実行できる **Python in Excel** 機能が登場。より高度なデータ処理が可能に。

#### 📌 Python in Excel とは？

Python in Excel は、Excel 内で直接 Python コードを記述・実行できる機能 であり、データ分析や可視化に活用できます。現在は Anaconda 環境に準拠 しており、pandas や numpy を含む主要なデータ分析ライブラリが利用可能です。

#### 🚧 まだ実現できないこと

現時点では、外部ライブラリの追加が不可 であり、API の呼び出しや Excel 外のファイル管理、VBA との完全な統合には制約があります。そのため、業務の自動化やシステム制御には別のツールとの併用が必要です。

https://forest.watch.impress.co.jp/docs/news/1525532.html

https://qiita.com/junkmd/items/cb934d6d5e887bb112a2

https://qiita.com/python_academia/items/f2b3833b457e79a9bdcd

------

# 🏁 参考サイト

- [Microsoft、OfficeのVBAマクロをデフォルトブロックへ　悪用対策で - ITmedia NEWS][vbs-news]
- [LAMBDA 関数 (microsoft.com)][lambda]
- [Excel の Power Query について (microsoft.com)][power-query]
- [Excel on the web の Office スクリプト - Office Scripts | Microsoft Docs][office-scripts]
- [Power Automate | Microsoft Power Platform][power-automate]
- [デスクトップ向け Power Automate | Microsoft Power Automate][desktop]
- [Windows への PowerShell のインストール][powershell-7]
- [Microsoft、「Python in Excel」を発表 ～Windows向けベータ版でテスト開始][python]

[vbs-news]: <https://www.itmedia.co.jp/news/articles/2202/08/news070.html>
[lambda]: <https://support.microsoft.com/office/lambda-function-bd212d27-1cd1-4321-a34a-ccbf254b8b67>
[office-scripts]: <https://docs.microsoft.com/office/dev/scripts/overview/excel>
[power-query]: <https://support.microsoft.com/office/about-power-query-in-excel-7104fbee-9e62-4cb9-a02e-5bfb1a6c536a>
[powershell-7]: <https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5>
[power-automate]: <https://powerautomate.microsoft.com/>
[desktop]: <https://powerautomate.microsoft.com/desktop/>
[connectors]: <https://japan.flow.microsoft.com/connectors/>
[python]: <https://forest.watch.impress.co.jp/docs/news/1525532.html>