元IT技術者の悪あがき

20年以上の熟成と味わい😊

【お知らせ】当ブログはアフィリエイト広告を掲載しています。

【広告】

【Excel】Excelマクロの使い方を思い出してみる

【目次】


はじめに

Excelにない関数を自作するため、Excelマクロを使ってユーザー関数を作成しようと思ったが、暫く振りで忘れていたため、ネットで拾い集めた情報を寄せ集めて対応した。

MSは時々何の前触れもなく仕様を変える前科があるため、この先も同じ手順で対応できるとは限らないが、念のため、記事として残しておこうと思った次第。

なお、個別の質問・問い合わせには一切応じないので悪しからず。

記事を読む前提条件

  • Excel VBAに関する知識を有すること
  • ワークシート上で自作ユーザー関数を使いたい方

今回使用した環境など

  • Windows 11 Home バージョン 24H2
  • Microsoft Excel for Microsoft 365 MSO(バージョン 2508 ビルド 16.0.19127.20192) 64ビット
  • 記事内容は2025年9月時点のもの。将来変更される可能性もある。

Excelユーザー関数の自作手順

1. Excelのオプションで「開発」タブを有効にする。※任意

Excelのタブから「ファイル>その他...>オプション」と選び、オプションダイアログを開く。

「リボンのユーザー設定...」タブを選択し「リボンのユーザー設定」ペインの一覧にある「開発」にチェックを入れて「OK」ボタンを押下する。

2. Visual Basic Editorを起動する。

  • キーボードショートカットを使用する場合は、Alt+F11キー。
  • GUIの場合は「開発」タブの「Visual Basic」ボタンを押下する。

3. 標準モジュールを追加する。

ユーザー関数は標準モジュールに記述しないとワークシートで呼び出せないため、標準モジュールを追加する。

方法については以下2種類どちらを選んでも可。

  • 【方法1】メニューバーから「挿入>標準モジュール」を選択して、標準モジュールを追加する。

  • 【方法2】ツールバーから「ユーザーフォームの挿入>標準モジュール」を選択して、標準モジュールを追加する。

4. ユーザー関数を作成する。

以下は一例。セル内の特定文字を数えて数値で返すユーザー関数。

Public Function CharCount(val As String, char As String) As Long

    '// 変数定義
    '// ちなみにVBAのコメントは本来シングルクォートだけで良い
    '// スラッシュを付けるのは他言語風にして見やすくするため
    Dim counter As Long
    Dim i As Long
    
    '// カウンターの初期設定
    counter = 0
    
    '// 引数に値がある場合のみ処理を行う
    If ((val <> "") Or (char <> "")) Then

        '// 1つ目の引数の文字数でループ処理
        For i = 1 To Len(val)

            '// ループ変数で指定した文字位置の内容が、
            '// 2つ目の引数の内容と同じ場合
            If (Mid(val, i, 1) = char) Then
            
                '// カウンターをインクリメントする
                counter = counter + 1
                
            End If
        Next i
    End If
    
    '// VBAでは関数名に対して戻り値を渡す
    CharCount = counter
    
End Function

今回は自分で使うだけなので、これ以上の細かい対応はしない。

なおデバッグ時は、イミディエイトウィンドウを表示して「Debug.Print」で出力して確認してみることをお勧めする。

5. セル内でユーザー関数を呼び出して利用する。

作成したユーザー関数の頭文字を数文字入力して、オートコンプリート(自動補完)でセル内に関数名が表示されたら無事成功。

表示されない場合は、Excelに認識されていない、もしくは関数名を間違えている可能性もあるので、適宜確認・修正する。

途中でも書いたが、ユーザー関数は標準モジュールに書かないと認識されない。

なおユーザー関数はExcelに元々存在するワークシート関数ではないため、処理速度に問題が発生する場合がある。

補足:マクロ付きファイルの保存は「.xlsm」形式で。

マクロが付いていると通常の「.xlsx」形式では保存できない。以下のようなダイアログが表示されると思う。

詳細は、ダイアログに記載されている内容に従って欲しい。

Excelマクロの注意点

Excelマクロは使い方によっては悪用できるため、企業の環境によってはグループポリシーでマクロが無効化されて使えない場合もある。念のため。