【簡単Excelマクロ・VBA】WorkSheetFunctionを使ってコードをシンプルに!|ワンポイントテクニック #009

アフィリエイト広告を利用しています。
Information
運営者・ポテ

いつもありがとうございます!

皆さん、こんにちは。ご覧いただきありがとうございます。

“日々の業務にちょうどいい自動化を”──

業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。

VBAは、WorksheetFunction を利用できることが、他のプログラミング言語にはない大きな特徴です。この機能により、Excelで使用する関数をそのままVBA内で活用できます。

たとえば、数値の合計や検索といった操作は、他のプログラミング言語ではコードを一から書く必要がありますが、VBAでは SUMVLOOKUP といった、あらかじめExcelに備わっている関数を呼び出すことでそれらの操作を行うことが可能です。

VBAでプログラミングを行う上で、この機能を使わない手はありません。WorksheetFunction を使いこなせば、コードのシンプルさが大きく向上します。

この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。

VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。

WorkSheetFunctionの基本構文

WorkSheetFunctionの基本構文は次の通りです。

WorkSheetFunction.関数名(引数)

変数に格納する場合は、次のように記述します。

Dim 変数名 As データ型

変数名 = WorksheetFunction.関数名(引数)

実務で良く使うWorkSheetFunction

実務で比較的よく使用される WorkSheetFunction をご紹介します。

Sum

範囲内の数値を合計する。

WorksheetFunction.Sum(データ範囲)

Average

範囲内の数値の平均値を求める。

WorksheetFunction.Average(データ範囲)

Count

範囲内の数値が入力されたセルの数を数える。

WorksheetFunction.Count(データ範囲)

CountIf

範囲内で条件に一致するセルの数を数える。

WorksheetFunction.CountIf(データ範囲, 条件)

Max

範囲内の最大値を求める。

WorksheetFunction.Max(データ範囲)

Min

範囲内の最小値を求める。

WorksheetFunction.Min(データ範囲)

Large

範囲内で n 番目に大きい値を求める。

WorksheetFunction.Large(データ範囲, n)

Small

範囲内で n 番目に小さい値を求める。

WorksheetFunction.Small(データ範囲, n)

VLookup

指定した値を縦方向に検索して対応する列の値を返す。

WorksheetFunction.VLookup(検索値, 範囲, 列番号, 検索の型)

検索の型は以下の通り。

検索の型 指定値 動作 使用例 注意点
近似一致 TRUE または 1 検索値に最も近い値を返す(検索範囲が昇順に並んでいる場合に正確に動作)。 点数や年齢など範囲ごとに値を割り当てる場合(例: 評価ランクや税率計算など)。 検索範囲は昇順に並んでいる必要がある
完全一致 FALSE または 0 検索値が完全に一致する場合に値を返す。一致しない場合はエラー(#N/A)。 商品コードや社員番号など、一意の値で検索する場合。 検索値が見つからない場合にエラーが発生する可能性がある。

近似一致の例

検索範囲が昇順に並んでいる場合に、75に近い値を返す。

Dim result As Variant
result = WorksheetFunction.VLookup(75, Range("A1:B10"), 2, True)
MsgBox result

完全一致の例

完全に一致する値を返す。検索値が見つからない場合、エラーになる。

Dim result As Variant
result = WorksheetFunction.VLookup("123", Range("A1:B10"), 2, False)
MsgBox result

HLookup

指定した値を横方向に検索して対応する列の値を返す。

WorksheetFunction.HLookup(検索値, 範囲, 行番号, 検索の型)

検索の型は、VLookupと同じ。

Match

範囲内で指定した値が何番目にあるかを求める。

WorksheetFunction.Match(検索値, 範囲, 検索の型)

Index

範囲内の特定の行と列にある値を取得する。

WorksheetFunction.Index(範囲, 行番号, 列番号)

WorkSheetFunctionへのデータ範囲の渡し方

WorkSheetFunctionへの主なデータ範囲の渡し方は、次の通りです。

A1形式

WorksheetFunction.Sum(Range("A1:A10"))

Cellsプロパティ

MsgBox WorksheetFunction.Sum(Range(Cells(1, 1), Cells(10, 1)))

配列

Sub ExampleArray()
    Dim data_array As Variant
    data_array = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    MsgBox WorksheetFunction.Sum(data_array)
End Sub

VBAスキルアップの参考情報

近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。

分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。

とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。

全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。

そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。

「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。

VBAのスキルアップ

VBAを学び始めるなら

入門書は、どれを選んでも大きな差はないように感じます。

どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。

もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

基礎を超えて力をつけたいなら

私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。

今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。

このレベルの本を一冊持っておくことに、損はないでしょう。


資格で能力を証明したいなら

VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。

特に「スタンダード」の方は上級者向けです。

あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。

以下の公式テキストが販売されています。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。

これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。

今はAIにコードを尋ねれば、答えが返ってくる時代です。

しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。


こちらの記事でも紹介しています。もしよろしければご覧ください。

【初心者歓迎】無料相談受付中 

運営者・ポテ

いつもありがとうございます!

限られた時間をより良く使い、日本の生産性を高めたい──

みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。

お気軽にご相談ください。


こちらの記事でも紹介しております。

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

今回の記事では、「WorkSheetFunctionの使い方」を解説しました。

お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。

この記事が皆様のお役に立てれば幸いです。

なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。

この記事を書いた人

運営者・ポテソフトデザイン工房|日々の業務にちょうどいい自動化を
■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を追求。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です