[Excel]あなたにも作れる! ワークシート関数を自作する!!

この記事のザックリした内容
  • ワークシート関数を自作する方法

 

こんにちは。ナガオカ(@boot_kt)です。

 

Excelを使う時、ワークシート関数を使っていますか?

一番よく使われるのはSUM()関数でしょう、きっと
オートSUMというボタンもあるので、ワークシート関数ナニソレ?とおっしゃる方でも、SUM()関数ぐらいは使ったことがある、もしくは知っている方が多いかも知れませんね

 

今回は少しだけ難しいです

テーマはワークシート関数ですが、後半はExcel VBAが出て来ます
Excel VBAを知らないと難しいかも知れません、、、、

 

しかしっ!!

 

プログラム言語と言っても、所詮は英単語です!!!
読めばなんとかなります!!

 

もしも、あなたが

  1. Excel VBAなんて知らねーーー
  2. プログラミングの経験も一切無い!

     

  3. でもプログラミングに興味を持っている

のであれば、この記事でプログラミングの便利さを少し知ってもらえるかも知れません

 

 

 

表を作る時、ワークシート関数は便利ですよね

例えばこんな成績表を作るとしたら、あなたならどうしますか?

  • 名前や点数は手入力
  • ワークシート関数を組み込む場所
    • 各教科合計
    • 個人合計
    • 評価
  • 評価の判定方法
    評価
    基準点 評価
    80点以上 A
    60点~79点 B
    40点~59点 C
    20点~39点 D
    0点~19点 E

 

各教科合計と個人合計の出し方はすぐ分かると思います
今回の表では使っていませんが、平均や最大値、最小値があっても分かりますよね?

 

そうです、合計はSUM()関数を使います
今回の表では使っていませんが、平均・最大値・最小値を出すのであれば、AVERAGE()関数・MAX()関数・MIN()関数を使います

一応、書いておきますね

各教科合計
セル番地 入力すべき内容
B13 =SUM(B3:B12)
D13 =SUM(D3:D12)
F13 =SUM(F3:F12)
H13 =SUM(H3:H12)
J13 =SUM(J3:J12)
個人合計
セル番地 入力すべき内容
L3 =SUM(B3:J3)
L4 =SUM(B4:J4)
L5 =SUM(B5:J5)
L6 =SUM(B6:J6)
L7 =SUM(B7:J7)
L8 =SUM(B8:J8)
L9 =SUM(B9:J9)
L10 =SUM(B10:J10)
L11 =SUM(B11:J11)
L12 =SUM(B12:J12)

 

ワークシートは面倒

あなたなら、評価の文字(AとかBとか)をどうやって判断してどうやって表示しますか?
手入力なんて面倒なので、ここにワークシート関数を使い、左隣の点数を参照して評価するようにしましょう
※評価の判定方法は前章参照

 

↓の図での赤字の部分

 

僕が書いたワークシート関数は以下に掲載します

分からない方はちょっとだけでも考えてからご覧ください

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

考えましたか?

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

え? よく分からない・・・・?

じゃ、ヒント出しましょう

IF()関数を使いましょう

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

どうです?

分かりました?

 

え!???

まだ考えてない!?

って言うか、考えるつもり無いって!?

 

考えたよーって方はお進みください

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

 ↓

じゃ、私が書いたものをお見せします

 

評価のワークシート関数
セル番地 入力すべき内容
C3セル =IF(B3>=80,”A”,IF(B3>=60,”B”,IF(B3>=40,”C”,IF(B3>=20,”D”,”E”))))
C4セル =IF(B4>=80,”A”,IF(B4>=60,”B”,IF(B4>=40,”C”,IF(B4>=20,”D”,”E”))))
C5セル =IF(B5>=80,”A”,IF(B5>=60,”B”,IF(B5>=40,”C”,IF(B5>=20,”D”,”E”))))

※これら以外のセルの内容は省略しますが、書く内容は同じです

 

単にIF()関数を組み合わせて使っているだけです

ね、簡単でしょ?
(IF()関数を知っているならね)

 

でも、面倒じゃないですか?

ワークシート関数って簡単で便利だけど、ちょっと複雑なことをしようと思うと長くなって見づらいし面倒だし・・・・
書きづらい&読みづらいっていうイメージを僕は持っています

 

評価としてA B C D Eっていう文字を出すのって特に難しい処理じゃないけど、ワークシート関数は結構長いですよね

一つのセルは小さいのに、こんな長い式を書くのは面倒

後で評価の手段を変更するとなったらとても面倒だし

しかも、使っているセル全てに対して修正しないといけないし

ワークシート関数を使っているセルって、パッと一目では分からないんですよね

 

なので僕はこのワークシート関数がそんなに好きじゃないんです

 

ワークシート関数が面倒なら、じゃ、何を使うんだよ!

はい、自作のワークシート関数です

 

ここからはExcel VBAの知識が無いと分からないと思います

Excel VBAを勉強してみたい方はこちらをどうぞ

Excel VBAに関してはこれ一冊でいいと思います
ちょっと分厚いんですけど、この一冊をやっておけば、実用レベルのVBAの使い方で困ることは無いでしょう

 

独学をやってみたけど、分からなかった・・・、挫折した・・・、というような方はレッスンしますよ!
まずは無料体験からどうぞ

 

ワークシート関数を自作しよう!!!

ワークシート関数って自作できるんですよ

ユーザー定義関数って言うらしい

 

名前はどうでもいいですけど

 

作り方を説明しましょう

 

作り方の概要

  1. VBA画面を表示(AltF11)します
  2. Functionプロシージャを書きます
    例えば、こんな感じ

    Public Function MYRATING(score As Long) As String
        
    End Function
    
  3. ワークシート画面に戻ります
  4. セルに=MYRATING()と入力します
    セルで=を打てばMYRATINGが出て来るはず
    出てこなかったら何かが間違っています

 

では、実際に作る手順をお見せします

ワークシートはこれを使います
今は評価の欄には何も書かれていません

VBA画面を表示(AltF11)します

上図のように、VBAProjectが2つあります
今回はsample.xlsmというファイルが対象です

  1. VBAProject (sample.xlsm) 選択
  2. 右クリック挿入(N)標準モジュール(M)

Functionプロシージャを書きます

Option Explicit

Public Function MYRATING(score As Long) As String
    Dim ret As String
    
    Select Case score
        Case 0 To 19
            ret = "不可"
        Case 20 To 39
            ret = "可"
        Case 40 To 59
            ret = "普通"
        Case 60 To 79
            ret = "良"
        Case 80 To 100
            ret = "優良"
    End Select
    
    MYRATING = ret
End Function

ワークシート画面に戻ります

こっちの画面に戻ります

セルに=MYRATING()と入力します

評価のセル(上図ではC3セル)に=とか=mとか=myとか打ってみましょう

で書いたMYRATINGを選択することができますね
=MYRATING(B3)と書いたらEnterキーで確定しましょう

入力時のポイント
こんな感じでキー操作するといいよ

  1. =myと入力
  2. TABキー
  3. キー
  4. Enterキー

ワークシート関数名はフルフルに自力で打たなくても、TABキー押せばそれが選択された状態になるよ
関数名が現れたら、TABキー押せばいいってのを知らない人が意外と多い

 

あとはコピペ

C3セルを他の評価のセルにコピペすればOKです!

オマケ:ワークシート関数でもちょっと融通を効かせるには

この記事では説明しませんが、基準値や評価の文字を変更するには下図のように別表から取得する方法もあります
興味ある方はご覧ください

C3セルの式

=IF(B3>=B$22,$A$22,IF(B3>=B$21,$A$21,IF(B3>=B$20,$A$20,IF(B3>=B$19,$A$19,

 

今回使ったファイル

この記事で使用したファイルをzipにして置いておきます
解凍したら、sample.xls_というファイルが出来ます

拡張子,xls_.xlsmに変更すればExcelマクロファイルとして使用できます

興味のある方は自由にダウンロードして、ワークシート関数やVBAコードをご参照ください

VBAマクロファイルです。

ダウンロードおよび実行する場合、各自の自己責任でご利用ください。
このファイルが原因で、データ損失・コンピュータウィルスやランサムウェアその類のソフトに感染等しても、当方では一切の責任を負いません。

ダウンロード >> sample.zip

 

広告




 

さいごに、

本文中にも書きましたが、

ワークシート関数は便利なんですよね
=SUM(A1:A10)みたいな感じで使う分には短いしラクチンだしね

ワークシート関数を組み合わせて使えば込み入ったこともできます
けど、ワークシート関数を組み合わせるとなると長く書く必要があるので、書きづらいしよみづらい

しかもっ!!!

セルにワークシート関数が入っているかどうかなんて分からないので、間違えて消しちゃうこともありますしね
苦労して苦労して組んだワークシート関数を消しちゃった時の虚無感と言ったら・・・

今回のように自作のワークシート関数であれば、セルに入力している=MYRATING(B9)を消してしまうことはあるものの、処理本体のソースコード自体は不意に消してしまうことは無いですし

Excel VBAを覚える必要はあるものの、一回覚えてしまえばこの先ずーーーーっとラクチンになりますので、Excel VBAを覚えることをオススメしますよ、ホントに!

 

ちなみにですが、
Excel VBAなんて分からなくても、自動記録を使えば結構なんとかなったりするんですけどね
自動記録の事は、ウチのプログラミングレッスンの無料体験でお教えしていますよ
興味のある方はぜひ!

 


 

プログラミング のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!

 

 

コメントを残す

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

ABOUTこの記事をかいた人

Windows/Mac/Linuxを使う現役システムエンジニア&プログラマ。オープン系・組み込み系・制御系・Webシステム系と幅広い案件に携わる。C言語やC#やJava等数多くのコンパイラ言語を経験したが、少し飽きてきたので、最近はRubyやPython、WordPressなどのWeb系を修得中。初心者向けのプログラミング教室も運営中。オンライン・対面・出張等でプログラミングをレッスンします。