
Excelで使う「ユーザー定義関数」とは、自分で「関数」を作って使うことが出来るということです。
簡単な数式だとセルに直接入力した方がいいんですが、数式が複雑になってきたり、頻繁に使うものは「ユーザー定義関数」に登録しておくと、めちゃくちゃ便利です。
< スポンサーリンク >
ユーザー定義関数の作り方
[開発]タブ>[コードの表示]をクリックします。
![[開発]タブ>[コードの表示]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func01.webp)
左側のプロジェクトエクスプローラーの今開いているのブックを右クリックし、[挿入]>[標準モジュール]をクリックします。
![[挿入]>[標準モジュール]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func02.webp)
今回は、『渡されてきたセルの値の先頭に「ユーザー定義関数:」という文字をつけて返す』という自作関数にしてみます。
下記のように書いて保存します。
1行目:「User_Func(Rng As Range)」の「Rng」が渡されてきたセル
2行目:「User_Func」が返される値
Function User_Func(Rng As Range) As Variant
User_Func = "ユーザー定義関数:" & Rng.Value
End Function

「A1」セルに文字を入力しておき、「B1」セルにユーザー定義関数の「User_Func」を使ってみます。

「B1」セルに
=User_Func(A1)
と入力します。

「B2」セルにユーザー定義関数の「User_Func」の結果が表示されました。

どのブックからも使えるようにアドインに登録する
ユーザー定義関数を作ったら、作ったブックでしか使えません。
どのブックからも使えるようにするには、アドインに登録しておくと便利です。
以下は、Excel2021での操作です。
[ファイル]をクリックします。
![[ファイル]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func07.webp)
[このPC]をダブルクリックします。
![[このPC]をダブルクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func09.webp)
「ファイルの種類」を「Excel アドイン(*.xlam)」を選択し、「ファイル名」を入力し、[OK]をクリックします。
※ファイル名はユーザー定義関数と同じにするとわかりやすいです。
![「ファイル名」を入力し、[OK]](https://lilia-study.com/wp-content/uploads/2023/12/user-func10.webp)
[ファイル]をクリックします。
![[ファイル]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func07.webp)
[その他]>[オプション]をクリックします。
![[その他]>[オプション]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func11.webp)
[アドイン]をクリックし、「管理(A):Excelアドイン」の[設定]をクリックします。
![[アドイン]をクリックし、「管理(A):Excelアドイン」の[設定]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func12.webp)
保存したファイル名にチェックを入れ、[OK]をクリックします。
![[OK]をクリック](https://lilia-study.com/wp-content/uploads/2023/12/user-func13.webp)
これで、どのブックからもユーザー定義関数が使えるようになりました。

ユーザー定義関数でできないこと(注意点)
ユーザー定義関数では、VBAが使えるので何でもできちゃう気がしますよね。
しかし、セル内の数式から呼び出されるユーザー定義関数では次のことはできません。
- スプレッドシートでのセルの挿入、削除、または書式の設定。
- 別のセルの値の変更。
- ブックでのシートの移動、名前の変更、削除、または追加。
- 計算方法や画面表示など、環境オプションの変更。
- ブックへの名前の追加。
- プロパティの設定およびほとんどのメソッドの実行。
こんな記事も書いています