CALL関数 – DLLの関数を呼び出すための関数(高度な用途・セキュリティ制限あり)
1. 使い方と活用例
CALL関数は、Windows環境で使用可能なDLL(ダイナミックリンクライブラリ)内の関数を直接呼び出すための関数です。
Excelの標準機能では提供されていない処理を外部ライブラリを通じて実行できますが、非常に高度かつリスクを伴う関数です。
2. 基本の書式
=CALL("ライブラリ名", "関数名", "戻り値の型", 引数1, 引数2, ...)
3. 引数の説明
- ライブラリ名 – 呼び出すDLLファイルの名前(例:”kernel32″ など)
- 関数名 – DLL内で呼び出したい関数名
- 戻り値の型 – 関数の戻り値の型を示す文字(”J”=整数、”D”=倍精度数値 など)
- 引数 – 呼び出す関数に渡す引数(数値や文字列)
4. 使用シーン
- VBAやExcelで利用できないOSレベルの機能を使いたいとき
- 特定の業務アドインやシステム統合処理で外部DLL関数を利用したいとき
5. 応用のポイント
CALL関数の使用には以下のような重要な注意点があります。
- 通常のExcel環境では使用できません。
- マクロが有効化されているブック(XLMマクロ)でのみ動作します。
- Excel 2013以降では高度なセキュリティ制限がかけられており、実行不可の設定がデフォルトです。
- 誤った呼び出しによってExcelがクラッシュする、またはセキュリティホールとなる可能性があります。
6. 具体例とその解説
以下は、Windows API「GetTickCount」を呼び出してシステム稼働時間(ミリ秒)を取得する例です。
※通常のExcelワークシート上では実行できません。
=CALL("kernel32", "GetTickCount", "J")
この関数は、システムが起動してからの経過ミリ秒を整数として返します(戻り値型 “J”)。
ただし、これは古いXLMマクロ環境でのみ機能します。
7. 関連関数の紹介
- REGISTER関数 – CALL関数で使用するDLL関数を事前登録する関数
- RTD関数 – COMオブジェクト経由でリアルタイムデータを取得する関数
- VBA(Declareステートメント)– 外部関数呼び出しをVBAで行う標準的手段
8. まとめ
CALL関数は、外部DLLの関数を直接呼び出すための強力な関数ですが、現代のExcelでは非推奨かつ制限が強く、通常業務での使用は推奨されません。
Excelの高度な自動化が必要な場合は、VBAやOffice アドイン、Power Automateなどの代替手段を検討することをおすすめします。
9. 対応バージョン
CALL関数は、Excel 4.0マクロ(XLM)で導入された関数であり、現在も一部の環境では使用可能です。
ただし、Excel 2013以降はセキュリティ上の理由で無効化されていることが多く、使用には特別な設定と注意が必要です。