エクセルマクロ・VBA入門 第6回 名刺管理ソフトを作ろう!

こんにちは、エクセル使いこなし隊 隊長の吉井良平です。

エクセルマクロ・VBA入門も第6回になり、ここまでの知識で充分に実用的なマクロが作れます。

今回は、これまでの集大成ということで、現時点で作れる超実用的マクロ「名刺管理」を作ってみましょう。

この名刺管理ファイルを作る方法をマスターすれば、会員登録やアンケートの回答入力なども、ほぼ同じ方法でできます。

入力時間の削減、入力ミスの削減など、大きな効果がありますので、さっそく作っていきましょう!

名刺管理簡易ソフトを作ろう!

 

最近は、スマホで名刺を撮影したら、データ化してくれるアプリもありますよね。

確かにすごく便利だと思いますが、名刺データをエクセルなどで活用する際には、結局有料プランにしないといけません。

また、名刺を撮影してデータを送付していると結局は1分ぐらいの作業になるので、それだったら最初から入力するのと、そんなに時間も変わりません。

なので、データ化するために有料プランにするのであれば、名刺をエクセルで入力しておくというのも、一つの手です。

 

まぁ、名刺管理をエクセルでやるかどうかというのは置いておいて、これは一つの例として名刺管理簡易ソフトを作っていきましょう^^

 

まず入力用とデータベース用のシートを作る

 

マクロのプログラムを作る前に、入力用とデータベース用のシートを作りましょう。

 

入力用シート

入力する項目を一蘭にして、右側に入力欄を設けたものです。

ホームページアドレスとか、必要なければ適宜削除してください。

入力用シート

入力用シートの内容

項目名と入力欄が分かりやすくなるように、項目名に色付けしておくと良いでしょう。

また、必要があれば「データの入力規則」という機能を使って、区分欄のように「代理店、仕入先、ユーザー」しか入らないようにリスト化したり、メールアドレスや電話番号欄は日本語入力をオフにしておけば、入力が早くなりますし、ミスも減ります。

*データの入力規則に関しては「エクセルの入力ミスを減らし、スピードも上げる方法」記事をご覧ください。

 

データベース用シート

入力用シートで縦系列だった項目を、横に入れ替えただけです。

先頭にID番号の列と、無効になったことの入力欄(異動や退職など)を入れておきました。

名刺DB用シート

データベース用シート

列の幅は、後で調整すれば良いので、適当です。

 

入力用シートと、データベース用シートを作ったら、シート名を分かりやすく変更しておきます。

シート名変更

シート名を変更した

これで準備完了です^^

なお、実習用にここまで作ったエクセルファイルをダウンロードできるようにしておきますね。

 

ダウンロード

 

入力用とデータベース用と、シートを分ける理由

 

もしかしたら「わざわざ入力用とデータベース用にシートを分けなくても、直接データベース用シートに入力すれば良いじゃん」と思った方もいるかもしれません。

それはそれでその通りなんですが、入力用とデータベース用でシートを分けることには、理由があります。

 

① チェックができる

入力した内容が間違っていないかチェックするためには、入力した内容が1つの画面で見えておく必要があります。

データベースとして直接入力すると、右側に長くなって1画面で入りきらないので、チェックができません。

 

② 入力が早い

上から下に入力していった方が、左から右に入力するより、早く入力できます。

また、名刺などは縦書きと横書きがあったり、必ずしも会社名⇒部署名⇒個人名⇒住所⇒電話番号という順番で並んでなかったりもするので、素早く違う項目欄に移動できるようにしておく必要があります。

 

③ きれいなデータを作る

紙じゃなくてデータにするということは、そのデータを何らかの形で転用できるようにする、というのが目的ですよね。

例えば、DM用のラベルシールを作ったり、年賀状の宛名にしたり、ともあれ何らかの転用目的があります。

データベース形式で直接入力すると、チェックがしにくいので、どうしても間違いが多いデータになって、結局使えないデータになってしまいます。

また、一つのファイルを部署で共有して使う時など、「この人は特別」という意味かどうか分かりませんが、名前に★マークをつけたりする人や、間隔をあけたいからか1行おきに入力する人など、いろんな人が現れます。

そうしているうちに、どんどんグシャグシャの使えないデータが作られていくのです!

 

まぁある程度は笑い話で済むんですけど、前職でキャンペーンの応募はがきの入力を複数人でやってたときには、あまりのデータのグシャグシャさに目まいを覚えましたよ・・・

 

エクセルなので、そこまで細かい管理はできませんが、少なくとも入力用とデータベースを分けておくことで、「極力データベースシートはいじらない」というルールを徹底することができるようになります。

 

ということで、きちんとしたデータを取る場合は、入力用とデータベースのシートは分けておきましょうね。

 

プログラムを書いていこう

 

さて、ここから入力用シートに入力されたデータを、データベースシートに移していくマクロを作っていきます。

ちょっと長くなるので、コピペできるようにしておきますが、出来れば実際にビジュアルベーシックエディターに入力していってみてくださいね。

では、コードを解説していきます。

 

変数を宣言する

3行目と4行目で、今のマクロで使う変数を宣言しています。

変数を宣言する方法は、Dim 変数名 as 変数の型 でしたよね。

(記憶があいまいな方は、第5回をもう一度読んでみてください)

このマクロでは、AllRowという名前の変数と、LastRowという名前の変数を、数値型として宣言しています。

AllRowは、すべての行ということで、そのままの名前にしています。

LastRowは、最終行ということで、これもそのままの名前です。(実際には、最終行の次の行として使っていますが)

変数であることが分かるように、大文字と小文字を組み合わせた名前にしています。

 

データを追加する行を取得する

6行目と7行目で、データベースシートにデータを追加する行を取得しています。

第5回目までに出てきていない内容ですが、便利なので、もうこのまま覚えてください。

AllRow = ActiveSheet.Rows.Count

で、アクティブシートの総行数を数えて、その数をAllRowという変数に格納しています。

エクセルの総行数は 1,048,576行ですが、そんな数を覚えていられないし、エクセルの仕様が変わったら面倒なので、VBAのプログラムで数えています。

LastRow = Worksheets(“名刺DB”).Cells(AllRow, 1).End(xlUp).Row + 1

Cells(AllRow, 1).End(xlUp).Row の部分で、最終行の1列目から上方向に移動して、初めてデータがあるセルの行を取得しています。

実際にデータを追加するのは、最終行の次の行なので、最後に1を足しています。

データがあるのは”名刺DB”シートなので、Worksheets(“シート名”)という形で、最初にシート名を指定しています。

この部分は、マクロを使っているとかなりの頻度で使うので、もうセットでメモ帳か何かに残しておくと便利です。

Dim AllRow As Long
Dim LastRow As Long

AllRow = ActiveSheet.Rows.Count
LastRow = Worksheets(“シート名”).Cells(AllRow, 1).End(xlUp).Row + 1

 

データを追加していく

データを追加する行が取得できたので、後はデータを追加していくだけです。

Worksheets(“名刺DB”).Cells(LastRow, 3) = Worksheets(“入力”).Cells(4, 3)

「名刺DBシートのLastRow行の3列目は、入力シートの4行目3列目です」ということで、対応する項目のデータを、入力シートからDBシートに写していきます。

もう後は、黙々とひたすらこの繰り返し・・・です。(10行目から24行目まで)

と言ってもコピペして、行番号と列番号を変えていくだけですけど。

 

慣れてきたらもっと短く書けるようになりますが、これで動きます。充分です。

最初から見た目が美しいコードを書こうとするよりも、ベタベタでも良いので分かりやすいコードを書きましょう。

というか、今回は「ノンプログラマーのための」と銘打っているので、システム関係以外の部署の人を対象としたマクロ入門です。

あまり美しいコードを書くと、かえって他の人から分かりにくくなって、「アイツがやっていることは分からない」とか言われてしまう可能性もあるので、その意味でもベタベタなコードの方が良い面があります。

 

話は戻って、9行目はID番号なので、この場合は3行目から始まっているので、入力行の行番号から-3した値を入れています。

ID番号は無理に入れなくても大丈夫ですが、あると何かと便利なので、面倒な場合はLastRowの値そのままでも良いので入れておいた方が良いです。

 

26行目は、日付を yyyy/m/d で表示させるようにしています。

28行目は、入力シートのデータは全て写し終わっているので、入力内容をクリアする命令です。

30行目は、次のデータを入力できるよう、入力シートの最初の入力欄 C4 を選択する命令です。こういうちょっとしたことで、1~2秒ぐらいは時間が短縮されますよ。

 

登録ボタンを作る

マクロができたら、わざわざ実行ボタンを押さなくても良いように、入力シートの適当な位置にボタンを作ります。

ボタンの作り方を忘れた方は、第5回をもう一度みてくださいね。

マクロボタン

ボタンの位置は、自分が使いやすい位置に配置してくださいね

 

まとめ

途中、やや説明不足の点もあったかもしれませんが、これで簡易名刺管理ソフトができました!

このやり方で、会員名簿の作成や、アンケートの回答入力フォームを作ることができるようになります。

ご自分のお仕事で、この方法を応用できることがあれば、積極的に使ってみてくださいね。使えば覚えるし、使わなければ忘れます^^

 

ここまでの6回で、「ノンプログラマーとして」覚えておいた方が良いマクロの知識は、7~8割はカバーしているはずです。

ここから先は応用編ということになるので、さらに進みたい方はこちらの記事をご覧ください。

↓ 次はこちら ↓

エクセルマクロ・VBA入門第7回: 繰り返し処理をマスターしよう!

コメントを残す

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

ABOUTこの記事をかいた人

昭和48年広島県生まれ。現在も広島に住んでいます。 趣味は音楽鑑賞(邦楽、洋楽問わず、クラシック、童謡も)、マンガです。エクセルを効率的に使う方法を紹介して、あなたのお役に立ちたいと思っています。