記事一覧

Excelで12倍仕事を速くしよう! - ユーザー定義関数の活用

  

  

Excelで12倍仕事を速くしよう!

ハロー、みなさん。エジソンです。

Excelと言えば表計算ソフトのキングとしての名を欲しいままにしているアプリケーションです。

一方で、日本のIT業界においてはExcelは『Excel方眼紙』として活用されており、設計書からマニュアルまで・・・、ありとあらゆる用途で使われていることも有名ですよね。

全てのドキュメントをExcel方眼紙として取り扱うことについて、様々な是非がありそうですが、ここではそのような議論はいたしません。

何が言いたいのかというと、みんなExcel大好きですよね!?ってことです。

そのように、色々な用途に汎用的に利用されているExcelは、賢く用いれば仕事の生産性が高められ、手早く仕事をこなすことができるようになる力を秘めている。今回はそんなお話。

ちなみに、12倍という数字は適当です。何となく「2進数」倍にしたかったので、控えめに、12倍にしてみました!

  

プログラミングは翻訳作業である

プログラムというものは、頭の中にあることをプログラミング言語の仕様に則り事細かくコーディングしていくものです。

日本語として頭の中にあるものは、まずはじめに設計書として書き起こされ、設計書として書き起こされた日本語を英語に近い形でプログラムに焼きなおす作業、それがプログラミングという名の翻訳作業なのです。

つまりは、プログラミングを行う際には、設計書をインプットとして用い、翻訳したものがプログラムというアウトプットになるということなのです。

さて、そんな翻訳作業を楽にするためにExcelを活用することができます。プログラミングというのは創造的な作業であると同時に泥臭い力作業のようなこともしなければいけないことも多々あるわけです。

そんな力作業を、Excelで楽にするテクニックを紹介したいと思います。


ユーザー定義関数を作っちゃおう

ここからは、実践編ということでExcelを使いながら説明していきます。

Excelを起動します。
excel12_1.png 

開発タブを表示します。
ファイルからオプションを開きリボンのユーザー設定をクリックします。
下図に従い、開発にチェックします。
excel12_2.png

開発タブからVBAエディタを開きます。
excel12_3.png 

VBAエディタで標準モジュールを挿入します。
excel12_4.png 
変換用関数を作ります。
excel12_5.png

Excelの画面に戻り、任意のセルに今作成した関数を式として埋め込みます。
すると、作成した関数の仕様に則り与えられた入力が変換されて表示されました。
excel12_6.png

このように標準モジュールに自作関数を作成することで、Excelのシートにセル数式として埋め込むことができるようになります。

ポイントは標準モジュールに関数を宣言するという事、SubではなくあくまでもFunction関数を定義するという部分でしょうか。

標準モジュールに追加した関数はグローバルに扱われるので、現在開いているブックから好きなように呼び出すことができます。


よく使う関数・・・きっと永久保存版

僕の中であるあるなもの・・・、きっと周辺のITエンジニアでもあるあるなものが・・・、以下のネーミングルールに基づいた変換関数ではないでしょうか。

・キャメルケース(先頭小文字)・・・先頭が大文字の場合はパスカルケース
 隣接する次の単語が大文字になる記法でラクダのようなこぶに見えることが語源。
 JavaやC#などでよく見られる。
 例)camelCase

・スネークケース
 隣接する単語はアンダースコアで連結される。
 へびのように見えることが語源。DBの命名に多く用いられている。
 例)snake_case

上記の2つを相互に変換する関数があると仕事が捗りそう・・・、ということで紹介します!


スネークケースをキャメルケースに変換

Public Function SnakeToCamel(ByVal val As String, Optional ByVal isFirstUpper As Boolean = False) As String

    Dim ret As String
    Dim i   As Long
    
    Dim snakeSplit As Variant
    snakeSplit = Split(val, "_")
    
    For i = LBound(snakeSplit) To UBound(snakeSplit)
    
        ret = ret & UCase( _
                          Mid(snakeSplit(i), 1, 1)) & _
                          Mid(snakeSplit(i), 2, Len(snakeSplit(i)) _
                          )
    Next

    If isFirstUpper Then
        SnakeToCamel = ret
    Else
        SnakeToCamel = LCase(Mid(ret, 1, 1)) & Mid(ret, 2, Len(ret))
    End If
    

End Function

キャメルケースをスネークケースに変換

Public Function CamelToSnake(ByVal val As String, Optional ByVal isUpper As Boolean = False) As String

    Dim ret As String
    
    Dim i      As Long
    Dim length As Long
    
    length = Len(val)
    
    For i = 1 To length
    
        If UCase(Mid(val, i, 1)) = Mid(val, i, 1) Then
            ' 大文字
            
            If i = 1 Then
                ' 最初の文字なら、アンダースコアは付与しない
                ret = ret & Mid(val, i, 1)
            
            ElseIf i > 1 And UCase(Mid(val, i - 1, 1)) = Mid(val, i - 1, 1) Then
                ' 前の文字が大文字なら、アンダースコアは付与しない
                ret = ret & Mid(val, i, 1)
            Else
                ' 小文字なのでアンダースコアを付与
                ret = ret & "_" & Mid(val, i, 1)
            End If
            
        Else
            ' 小文字
            ret = ret & Mid(val, i, 1)
            
        End If
        
    Next

    If isUpper Then
        CamelToSnake = UCase(ret)
    Else
        CamelToSnake = LCase(ret)
    End If
    
End Function


実行すると、以下のようになります。テーブル定義表からコピペしたカラムを貼り付け、変換関数を通すことで変換結果を得ることができます。

excel12_7.png 

入力として必要なものが既に設計書などに記載されているのなら、手で一文字ずつ打ち込むよりはるかに効率が良いはずです!


おわりに

ミスというものは、分け隔てなく平等に起きてしまうものと、僕は考えます。

ミスを回避するには、ミスが入り込む余地を少なくなる仕組みを考えるべきです。

ミスが入り込む余地を根本から少なくするには、人の手が介在する部分を少なくすることです。手で行われる作業をなるべく少なくなるように調整し、自動化できる範囲を広げていくことです。

バグというのは厄介なもので、自分ひとりで迷惑を被るものではなく、関わった人の全ての時間を浪費するということにあります。

例えば・・・。

僕がある機能を作ってテストして3時間。次工程で、Bさんがバグを発見してバグ表に記載して1時間。僕が再度修正してテストして1時間。Bさんが修正確認のために確認する作業に0.5時間。

合計すると、5.5時間です。もし、バグが無ければ3時間で済む作業だったかもしれないのに・・・。

もちろん、バグを引き起こすこと事態は仕方ないことですが、バグをいかにしてなくすか・・・、

そして、いかにしてケアレスミスを少なくするかを日ごろから考えているエンジニアと、そうでないエンジニアでは、能力に雲泥の差が生まれてしまうことは、想像に難くありません。

そのようなケアレスミスを少なくするための自動化のテクニックを今回は紹介しました。

キャメルケースとかスネークケースとか、ちょっとマニアックな例を語っちゃいましたが、日々向き合っている作業をただ淡々とこなすのではなく、一度振り返って自動化できないかを考えてみると良いかと思いますよ。

本記事の内容が、みなさんのお役に立てばうれしい限りです!
関連記事

このエントリーをはてなブックマークに追加

コメント

コメントの投稿

非公開コメント

プロフィール

EZOLABブログへようこそ。
EZOLABは、札幌のソフトウェア会社です。

http://ezolab.co.jp