Excel VBA関数を用途別に作成!計算・文字列処理の基本を初心者向けに解説
生徒
「エクセルで毎日同じ計算や、文字の組み換え作業をしていて疲れてしまいました。VBAで自分専用の便利な道具を作る方法ってありますか?」
先生
「それなら『Functionプロシージャ』を使って、用途別の関数を作るのが一番ですよ。計算用や文字処理用など、自分好みの機能を自由に作れます。」
生徒
「自分専用の関数ですか!難しそうですが、私にも作れるでしょうか?」
先生
「基本の形さえ覚えれば大丈夫です。事務作業が劇的に楽になる自作関数の作り方を、計算と文字列の二つのパターンで優しく解説しますね!」
1. 用途別に作る「自作関数」とは?
Excelには最初から「SUM」や「AVERAGE」といった便利な関数が備わっています。しかし、仕事の内容によっては「この複雑な計算をワンクリックで終わらせたい」「特定のルールで文字を並び替えたい」といった、標準の機能だけでは手が届かない場面が出てきます。
そこで登場するのが、VBAのFunction(ファンクション)プロシージャです。これは、特定の「用途」に合わせて自分で作るオーダーメイドの関数のことです。一度作ってしまえば、まるで魔法の杖のように、何度でも同じ処理を呼び出して使うことができます。プログラミング未経験の方でも、「計算担当の箱」や「文字加工担当の箱」を作るイメージを持つだけで、ぐっと理解が深まります。
2. 計算処理の関数を作る基本ルール
まずは、一番イメージしやすい「計算処理」の関数から見ていきましょう。計算用の関数を作る時は、「どんな数字を渡して」「どんな計算をして」「どんな結果を戻すか」を設計します。
例えば、商品の単価と数量を渡すと、自動的に金額を計算して返すような処理です。このように、特定の数式を一つのまとまりにしておくことで、計算間違いを防ぎ、誰でも同じ結果を出せるようになります。VBAのコードを書くときは、まず「これは計算用ですよ」という名前を付けるところから始めます。名前は自分が分かりやすいもので構いませんが、後で見返した時に「何をするものか」が分かる名前にするのがコツです。
3. 実践!掛け算を行うシンプルな計算関数
実際に、二つの数字を掛け合わせる簡単な関数を作ってみましょう。ここでは、長方形の「縦の長さ」と「横の長さ」を渡すと、その「面積」を計算して教えてくれる道具を作ります。
' 面積を求めるための専用関数
Function CalculateArea(length As Double, width As Double) As Double
' 縦 × 横 の計算を行う
Dim result As Double
result = length * width
' 計算結果を関数の名前に代入して「戻り値」にする
CalculateArea = result
End Function
' 関数をテストするための実行用コード
Sub TestArea()
Dim myArea As Double
' 縦5、横10の面積を計算してもらう
myArea = CalculateArea(5, 10)
MsgBox "計算された面積は " & myArea & " です。"
End Sub
このコードでは、CalculateAreaという名前の関数を作りました。length(縦)とwidth(横)という二つの情報を受け取り、掛け算した結果を返しています。このように、用途を「面積計算」に絞ることで、非常にシンプルで使いやすい道具になります。
4. 文字列処理の関数を作るメリット
次に、事務作業で非常に役立つ「文字列処理」の関数について解説します。文字列処理とは、名前や住所、商品コードといった「文字」をくっつけたり、切り出したり、形を整えたりする作業のことです。
例えば、「名字」と「名前」を別々のセルで管理している場合、それらを合体させて「様」を付け加えるという作業が頻繁に発生します。これを手作業でやると時間がかかりますが、専用の関数を作っておけば、一瞬で整った宛名を作成できます。文字の操作はエクセル作業の半分以上を占めるとも言われており、ここを自動化できる恩恵は計り知れません。難しい専門用語を使わずに言えば、「文字の工作」を自動で行うロボットを作るようなものです。
5. 実践!丁寧な宛名を作成する文字列関数
それでは、受け取った氏名に自動で「様」と「ご担当者」という文字を組み合わせて、丁寧な宛名を作る関数を作ってみましょう。文字列を扱うときは、String(ストリング)という種類を指定するのがポイントです。
' 氏名を受け取って丁寧な宛名にする関数
Function MakeAddress(personName As String) As String
Dim greeting As String
' 文字と文字を「&」記号でつなげる
greeting = personName & " 様(ご担当者様)"
' 完成した文字を返す
MakeAddress = greeting
End Function
' 実行して確認してみる
Sub ShowAddress()
Dim finalName As String
' 田中太郎さんの宛名を作ってもらう
finalName = MakeAddress("田中 太郎")
MsgBox finalName
End Sub
実行結果は以下の通りです。
田中 太郎 様(ご担当者様)
この &(アンパサンド)という記号は、文字同士を接着剤のようにくっつける役割を持っています。これを使うだけで、複雑な定型文の作成が驚くほど簡単になります。
6. 用途別に「引数」を使い分けるコツ
関数に渡す情報のことを専門用語で「引数(ひきすう)」と呼びます。用途別の関数を作る上で、この引数の設計はとても重要です。
計算用の関数なら「数値」を引数にしますし、文字処理用の関数なら「文字列」を引数にします。初心者がやりがちな失敗は、一つの関数に色々な役割を持たせすぎて、引数が多くなりすぎてしまうことです。まずは「一つの関数には、一つの役割」というルールを守りましょう。例えば、「計算もするし、文字も加工する」という巨大な関数を作るのではなく、「計算担当」と「文字担当」の二つに分けて作るのが、プログラミングの上達の近道です。これにより、後で一部だけ直したい時に、どこを触ればいいかが明確になります。
7. 条件によって処理を変える高度な用途別関数
用途によっては、「もし~だったら、こうする」という判断を含めたいこともあります。例えば、購入金額によって送料を無料にするか、500円にするかを自動で判断する関数などです。これは「条件分岐」と呼ばれる技術を組み合わせます。
' 金額に応じて送料を判定する関数
Function GetShippingFee(totalPrice As Long) As Long
' 5000円以上なら送料0円、それ未満なら500円
If totalPrice >= 5000 Then
GetShippingFee = 0
Else
GetShippingFee = 500
End If
End Function
' 実際に使ってみる
Sub CheckShipping()
Dim fee As Long
' 3000円のお買い物の送料を確認
fee = GetShippingFee(3000)
MsgBox "今回の送料は " & fee & " 円です。"
End Sub
このように、数値の大小を比較して結果を出し分ける関数は、見積書作成や在庫管理などで非常に重宝されます。これも「送料判定」という特定の用途に特化させた便利な道具の一つです。
8. 文字列を切り抜いて整える実戦テクニック
事務現場では、「商品コードの左から3文字だけが欲しい」といった、文字の一部を切り出す作業も多いです。これを用途別関数にしておくと、データのクレンジング(整理整頓)がとても楽になります。
' 商品コードからカテゴリー番号(先頭2文字)を抜き出す関数
Function GetCategoryCode(fullCode As String) As String
' Left関数を使って左側から2文字分を切り抜く
Dim part As String
part = Left(fullCode, 2)
GetCategoryCode = "カテゴリ:" & part
End Function
' 動作テスト
Sub TestSplit()
Dim myCode As String
' 「AB-12345」というコードからカテゴリを抽出
myCode = GetCategoryCode("AB-12345")
MsgBox myCode
End Sub
実行結果は以下の通りです。
カテゴリ:AB
このように、VBAに最初から用意されている小さな命令(Leftなど)を組み合わせて、自分の仕事にぴったりの「大きな用途の関数」に仕立て上げていくのが、VBA活用の醍醐味です。
9. 自作関数を長く使い続けるための注意点
せっかく便利な関数を作っても、後から使い方が分からなくなっては意味がありません。用途別に作成する際は、以下の点に気をつけましょう。
- コメントを書く: コードの中に「'(シングルクォーテーション)」を使って、何をする関数なのか日本語でメモを残しましょう。
- 分かりやすい名前を付ける:
Function Aのような名前ではなく、Function CalcTaxのように目的が伝わる名前にします。 - エラーを想定する: 数字を入れる場所に文字が入ってきたらどうするか、といった少し先のことも考えると、より壊れにくい頑丈な道具になります。
パソコンをあまり触ったことがない方でも、これらのルールは「整理整頓のコツ」と同じだと考えれば難しくありません。道具箱の中身を綺麗に保つのと同じように、自分の書いたコードを整理しておくことで、長期的にあなたの仕事を助けてくれる財産になります。
10. 用途別関数を活用して自動化の達人へ
ここまで、計算処理と文字列処理の二つの軸で自作関数の作り方を見てきました。VBAの関数を自分で作れるようになると、Excelの操作がただの作業から「システム構築」へと進化します。
最初は一行の足し算を返すだけの簡単な関数でも構いません。自分の日々の業務の中で、「あ、ここいつも同じことしてるな」という部分を見つけたら、それを関数にするチャンスです。一つ、また一つと自分の道具を増やしていくことで、気づいた時には複雑な自動化システムも自分で設計できるようになっています。まずは今日学んだ基本の形を真似して、身近な計算や文字の加工から始めてみてください。あなたのExcelライフがより快適で楽しいものになることを応援しています!