Excel上で操作を自動化したり、複雑な処理を行う場合、VBA(Visual Basic Applications)というプログラミング言語を使用してマクロを記述します。
VBAを使用したマクロによって処理を自動化することで、入力フォームを作成して入力したデータを自動的に処理して出力用のファイルを作成したり、特定の処理をワンクリックで行うなど、Excelの業務は飛躍的に時間を短縮が可能になります。
今回はVBAの基礎ともいえる、セルにデータを入力する方法について、サンプルコードを紹介しながら詳しく解説していきます。
Contents
VBAでセルにデータを入力する基本
まずはVBAの基本的な記述方法と動作について、理解を深めていきましょう。VBAではなにかを操作するためには「オブジェクト」を指定して、「プロパティ」の内容を操作します。
オブジェクトとは、ワークブックやワークシート、セルなどの、Excel上で操作できる対象を意味します。
プロパティとは、オブジェクトの属性のことで、オブジェクトの情報を格納しています。オブジェクトとプロパティを組み合わせることで、特定のシートを開いたり、セルに文字を入力するなど、さまざまな対象を操作します。
オブジェクトは階層構造になっているので、どのようなオブジェクトがあるのか把握するのと同時に、階層構造を理解しておくと良いでしょう。
Application(アプリケーション)
|
└- Workbooks(ワークブック)
|
└- Worksheets(ワークシート)
|
└- Range(セル)
今回は特定のセルに特定の文字やデータを入力したいので、セルを操作する「Range」オブジェクトの「Value」プロパティを使用します。
まずは新しいExcelを開いて ALT+F11を押してください。
このような画面が出てくれば成功です。これはVBAを書くためのエディタVBE(Visual Basic Editor)になります。では次にVBAを書くためのモジュールを挿入します。
メニューバー 挿入>標準モジュール と選択してください。
これで真っ白な画面が表示されれば成功です。ここに、これから紹介するサンプルコードを入力することで実行が可能になります。
では早速見ていきましょう。
例1 セルA1に「こんにちは」と入力してみましょう
Sub test()
Range(“A1”).Value = “こんにちは”
End Sub
以下のようにA1に「こんにちは」と入力できれば成功です。
特定範囲のセルにVBAで一括入力
ここまでで、1つのセルにデータを入力することができるようになりました。次に特定範囲に一括で入力する場合について説明します。VBAで範囲指定での一括入力を行う場合、Rangeの指定範囲を複数セルにする必要があります。
記述方法は簡単で、通常の数式や関数と同様に「:」マークを使用します。
例2 A1からC2範囲のすべてに「こんにちは」という言葉を入れてみましょう
Sub test()
Range(“A1:C2”).Value = “こんにちは”
End Sub
このサンプルを実行すると、以下のようにA1からC2まで「こんにちは」という文字列が入力されます。
なお、離れたセルや範囲を選択する場合も、数式や関数と同様に「,」を使用します。
例3 A1~A3とC1とE1にこんにちはと入力したい場合は、以下のように記述します
Sub test()
Range(“A1:A3,C1,E1”).Value = “こんにちは”
End Sub
VBAで数式を入力する
ここまでは決められた文字を入力していましたが、エクセルなのでもちろん数式や関数も入力が可能です。
例4 実際に、数式を入力してみましょう
Sub test()
Range(“A1”).Value = “=2 * 2”
End Sub
このサンプルを実行すると、A1に「2*2」の計算結果である4が入力されます。
Valueの中では、セルを指定することも可能です。
例5 A1とA2に入力されている数値を参照して計算し、結果をA3に出力したい場合は以下のように記述します
Sub test()
Range(“A3”).Value = “=A1*A2”
End Sub
このサンプルを実行すると、A1とA2の数値を参照して乗算を行い、結果をA3に出力します。以下の画面ではA1が2、A2が4なので、A3は8になります。
このように、VBAでセルの操作は難しくありません。また文字列だけでなく数式や関数も入力ができるため、普段使っているエクセルと同じようなデータの操作が可能になっています。
しかし、ここまでの解説の範囲ではマクロ画面を開いて実行する必要があり、自分一人で使う分にはいいものの、複数人が使用するマクロを作るには不親切です。
そこで、次にユーザーフォームの作成方法と、作成したフォームからデータをセルに入力する方法について解説していきます。
VBAでユーザーフォームを使ったデータ入力方法
ユーザーフォームは、エクセル上で簡易的にフォームを作成することができる機能です。もちろんユーザーフォームもVBE(Visual Basic Editor)を使って作成が可能です。
ユーザーフォームの作り方
まずはメニューバーにある「挿入」をクリックし、表示されたメニューの中から「ユーザーフォーム」をクリックします。
ユーザーフォームをクリックすると、以下の画面のように新しいユーザーフォームが作成されます。
左下のプロパティ画面が表示されていない場合は、「表示」>「プロパティウィンドウ」をクリックしてください。
ユーザーフォームを選択し、ツールボックスから任意の機能を追加します。今回はフォームに入力された情報を、任意のセルに入力するコードを書くため、「テキストボックス」と「コマンドボタン」を配置します。
ユーザーフォームに入力された情報をセルに入力する
前項で作成したフォーム画面のボタンをダブルクリックすると、以下のような画面が表示されます。これはユーザーフォームに紐付けられたVBAのコードです。
例6 このままではフォームが機能しないので、入力されたデータを挿入するセルを指示するコードを追加します
Private Sub CommandButton1_Click()
Range(“A1”).Value = UserForm1.TextBox1.Value
End Sub
このサンプルを実行すると、ユーザーフォーム内のテキストボックス1に入力された内容が、セルA1に挿入されます。
実行すると、フォームに入力された文字列を、「UserForm1.TextBox1.Value」で取得して、セルに入力します。
このように、VBA上で画面も作ることができるため、入力画面を作り、ボタンを押下するとデータが反映される、といったシステムであれば簡単に作ることが可能です。
セルを移動する関数offsetを使って自由に入力しよう
ここまでで、フォームなどを利用してセルをデータに入力する方法について解説してきました。ここではもう少し複雑な処理に必要なOffsetについて解説します。
VBAマクロでセルを移動する場合、Rangeのoffsetプロパティ(offset関数)を使用します。offsetとは、本来の意味は「差し引き」ですが、VBAではアクティブ(選択中)セルから選択範囲を移動することを意味します。
offsetプロパティの基本的な構文構造は、以下のようになっています。
Range.Offset(RowOffset,ColummOffset)
offsetは単体の他、現在選択されているセルを参照する ActiveCellや選択範囲を表すSelectionのような関数と組み合わせることが可能です。offsetは現在選択しているセルを中心に移動するため、多くの場合、以下の例文のようにActiveCellと組み合わせて使用します。
ActiveCell.offset(1,1)
この場合、現在選択しているセルから、選択範囲が下へ1セル、右へ1セル移動します。つまり、A1がアクティブだった場合、B2のセルに選択範囲が移動します。
また、選択範囲を移動したくないときは「0」、上や左のセルを選びたいときは「-(マイナス)」を使用します。
例7 先ほどのユーザーフォームに戻り、ボタンをダブルクリックしてスクリプトを表示し、内容を以下に修正してみましょう
Private Sub CommandButton1_Click()
ActiveCell.Offset(1, 1).Select
ActiveCell.Value = UserForm1.TextBox1.Value
End Sub
書き換えると、以下のようにフォームの挙動が変わります。
Offsetを利用することで、最初の入力ボックスは1つ目のセルに、2つ目の入力ボックスは2つ目のセルに、と入力場所をずらすことができたり、新規データを次の行に追加するなどの処理が書けます。また逆に選択したセルのデータを取得し、ボタンを押すとその下のデータを取得するといったことも可能です。
Offsetを理解することで、選択されているセルを起点に自由にデータを扱うことができるようになります。
データ入力VBAの活用方法
ここまでVBAによるデータ入力方法について解説してきました。まずはサンプルということでシンプルなものになっていますが、実際にはさまざまなVBAの機能を利用してもっと複雑なことが可能になります。
そこで、最後にデータ入力VBAを活用できる場面について2つほど紹介します。
定型のフォーマットを作成する
罫線や背景色なども操作することで、空のエクセルから自動で資料の定型フォーマットを作成することが可能です。例えば、A1には名前が入り、B2には日付が入り、といった形の処理を自動化することで、一つ一つ手で打つ必要がなくなります。
新規シートの追加からVBA化してしまうことで、新規にシートを作成する>自動的に定型フォーマットを作成する、までも自動化することができます。
サマリーシートを作成する
データの取り込みやピボットテーブルを作成するマクロと合わせることで、データを取り込み、ピボットテーブルをかけ、そのデータをセルに入れるといったことも可能になります。
多くのシステムが吐き出すCSVのデータを自動で取り込み、サマリー作成までが自動化できることになります。
セルへの入力はVBAの基本!
入力フォームの内容をセルに入力するのは、VBAの基本動作です。今回紹介したスクリプトの記述方法は、VBAを習得する上で必須ともいえる基礎的な内容なので、是非セルへの入力方法をマスターしてVBAでフォームを作成できるようになっておきましょう。
入力されたデータをExcelで処理し、データ活用に繋げることもできます。業務の自動化や事務処理の作業軽減に、VBAマクロは欠かせません。VBAは決して難しい言語ではないので、一つずつ基礎的な使い方から学ぶことで、バックオフィス業務に確実に活かしていけるでしょう。