• VBA

ExcelVBAについて学ぼう

VBA

1.はじめに

VBAとは?

「Visual Basic for Applications」の略語で、ExcelやPowerPointといったMicrosoft Officeのアプリケーションの機能を、拡張することができるプログラミング言語のことです。

2.ExcelVBAで出来る事

VBAを活用する事で作業効率のアップに繋げる事が出来ます。

①請求書や納品書の自動作成

Excelで作成した売上管理表から、顧客別に請求書を作成する作業です。請求書のフォーマットを設定し、必要な情報を自動的に差し込むことができます。毎週・毎月発生する業務は、VBAを使えば簡単に自動化できるので作業者の手を空けて、ほかの業務に取り組んでもらうことが可能です。

②データの自動チェック・修正

VBAを使えば、データの空欄、全角半角の混在、文字の誤字脱字などを自動的にチェックすることが可能です。さらに、必要に応じて自動で指定した修正をすることが可能です。これによって、データの正確性と品質が向上し、人的ミスによる問題を回避できるでしょう。

③メール送信:Outlookでメール一括送信

VBAではメールの作成から送信までを全て自動化することができます。
メールのフォーマットの指定箇所に、リンクや添付ファイルを自動添付することも可能です。月末報告やメールマガジンなどの定期的で形式が変わらないメールを、一斉作成、大量送信する際にとても効果的です。

④フォルダの作成、フォルダ名の一覧作成

フォルダを決まった階層どおりにたくさん作らなければならないとき、マクロなら一発で作成可能です。これまでに作ったフォルダ情報を一覧表にまとめることもできます。

⑤データ処理の自動化

VBAを使用すれば、データ集計などの四則計算を自動化することができます。
例えば、売上情報をExcelで一括管理し、企業別にデータの並べ替えと集計した数値をまとめて表示することが可能です。一つひとつ目視と手作業で行っていたこのような一連の作業がワンクリックで実行できるため、月末の作業の大幅な時間短縮につながります。

⑥帳票作成の自動化

社内では請求書、領収書、入出金伝票など様々な帳票が作成されます。
VBAを使用すれば、データ一覧をもとに、取引先別に自動でひな形に転記することが可能です。また、書類に記入しなければならない日付が抜けていたり、数字以外の文字入力を行うと警告をだす設定しておけば、データに誤りがあった場合でも間違った情報の修正を自動で実行し、人の手による入力ミスを限りなく減らすことができます。

3.ExcelVBAで使用する変数とは?

①変数とは?

変数とは、値を保存しておくことができる箱のようなものです。

値を入れたり、使ったりすることができます。

次のように書くことで、変数を使うことができます。

Dim 変数名 as

型名 変数名 = 値

型名で整数、小数、文字列など何を入れる箱なのか宣言してから、値を入れて使います。

例えば、次のようなイメージです。

変数サンプルコード:

Sub Test()
  Dim intData1 As Integer '整数
  Dim dblData2 As Double '小数
  Dim strData3 As String '文字列

  '変数に値を入れる
  intData1 = 10
  dblData2 = 3.14
  strData3 = "こんにちわ"

  '変数の値をメッセージで確認
  MsgBox "intData1:" & intData1 & vbCrLf & _
  "dblData2:" & dblData2 & vbCrLf & _
  "strData3:" & strData3
End Sub

実行結果:

②変数の適用範囲(スコープ)とは

次に、変数の適用範囲(スコープ)について解説します。

変数は、書く場所・書き方によって使える範囲が変わります。

・Dimでプロシージャ内:プロシージャのみ使える
・Dimでプロシージャ外:モジュール内で使える
・Publicでプロシージャ外:プロジェクト全体でどこからでも使える

言葉だけだとわかりづらいので、それぞれサンプルを交えて解説します。

まずは、プロシージャ内でのみ使う方法です。

VBAは次のような構成でデータができています。

プロジェクトの下に複数のモジュールがあり、モジュールの下に複数のプロシージャがあるイメージですね。

プロシージャ内でのみ使える変数を宣言することができます。

変数を学んだ時に最初に書くのがSubプロシージャの中なので、この方法を使っている人は多いと思います。

サンプルコード

Sub Test1()
  Dim intNum as Integer
  intNum = 123
End Sub

Sub Test2()
  Dim strMessage as String
  strMessage = "こんにちは"
End Sub

モジュール内でのみ使う方法

次は、同じモジュール内で使う方法です。

先ほどの図でいうと、次のように赤枠で囲った部分がモジュール内で使える変数となります。

モジュール内には複数のプロシージャを作れるので、複数のプロシージャをまたいで使うことができる変数を作ることができます。

サンプルコード

Dim intNum As Integer
Dim strMessage As String

Sub Test1()
  intNum = 1
  strMessage = "Test1のメッセージ"

  Debug.Print "intNum:" & intNum & vbCrLf & _
  "strMessage :" & strMessage
End Sub

Sub Test2()
  intNum = 2
  strMessage = "Test2のメッセージ"

  Debug.Print "intNum:" & intNum & vbCrLf & _
  "strMessage :" & strMessage
End Sub

プロジェクト全体で使う方法

つぎに、プロジェクト全体で使う方法について解説します。

先ほどの図でいうと、次の赤枠で囲った部分が範囲になります。

モジュールをまたいでどこからでも使える変数で、グローバル変数とも呼ばれています。

サンプルコードModule1:

Public intNum As Integer
Public strMessage As String

サンプルコードModule2:

Sub Test1()
  intNum = 1
  strMessage = "Module2.Test1のメッセージ"

  Debug.Print "intNum:" & intNum & vbCrLf & _
  "strMessage :" & strMessage
End Sub

サンプルコードModule3:

Sub Test2()
  intNum = 2
  strMessage = "Module3.Test2のメッセージ"

  Debug.Print "intNum:" & intNum & vbCrLf & _
  "strMessage :" & strMessage
End Sub

4.おわりに

手始めにExcelVBAで出来る事と変数について説明をさせて頂きました。ExcelVBAはExcelの効率化にも繋がり作業の時間短縮にも繋がります。例えば、手入力で100個の項目をやるとして、1つ1分で100分 VBAを使えば関数の代入も出来ますので5分~10分位での作業が可能になります。次回は変数の定義について説明させて頂きます。

投稿者プロフィール

SugiyamaTomokazu
最新の投稿

最近の記事

  1. raspberrypi

制作実績一覧

  1. Checkeys