戻る

Macro Visual Basic for Application

マクロとは…一連の手作業の操作を記録して実行できる機能。記録したマクロは繰り返し実行可能

目次


オブジェクト、プロパティ

オブジェクトの種類オブジェクトの名称
セルRange
ワークシートWorksheets
ブックWorkbook
グラフChartObjects
オートシェイプShapes
選択中のセルActiveCell

プロパティ

プロパティの種類プロパティの名称
データValue
色Color
列の幅ColumnWidth
行の高さRowHeight
罫線Borders
行番号Row
列番号Column
名前Name
アクティブシートActiveSheet
セルの左端の位置Left
セルの上端の位置Top
アクティブシートのすべての行Rows
オブジェクトの個数を返すプロパティCount
セルオブジェクトのプロパティ
セルのデータValue
セルの数式Formula
行の高さRowHeight
列の幅ColumnWidth
セルの文字フォントFont
行番号Row
列番号Column
フォントの名前[RangeObject].Font.Name
フォントサイズ[RangeObject].Font.Size
太字[RangeObject].Font.Bold = True/False
文字色の指定[RangeObject].[InteriorObject].color = RGB(R,G,B)
[ShapeObject].Lineのメソッド
Line.ForeColor.RGB = RGB(R,G,B)
Line.Weight = 線の太さ
Line.BeginArrowheadStyle = [矢印のスタイル]矢印のスタイル
  • msoArrowheadNone:矢印なし
  • msoArrowheadOpen:開いた矢印
  • msoArrowheadOval:楕円形の矢印
  • msoArrowheadStealth:ステルス型矢印
Line.EndArrowheadStyle = [矢印のスタイル]
[WorkbookObject].Path指定したブックのファイルの場所を取得

メソッド

メソッドの種類メソッドの名称
オートフィルターAutoFilter(Field:= 列数,Criteria1:= 比較演算子を前置して条件を指定,Operator:=[xlAnd:エクセルにおける&],Criteria2:=比較演算子を前置して条件を指定)
※引数なしでオートフィルターをクリア
並べ替えSort(Key1:=並べ替えるオブジェクト, _
Order1:= 昇順[xlAscending]か降順[xlDescending], _
Header:=ヘッダーを含めるか否か, _
コレクションの追加Add(After:=ワークシート名(選択したシートの右側), _
Before:=ワークシート名(選択したシートの左側), _
Count:=数値(追加するシート数))
※場所指定なしでAddを用いるとワークシートはアクティヴシートの左側に追加されそのシートがアクティブになる
アクティベイトActivate
シートをコピーする
(指定先は別のブックでも可)
[WorksheetObject].Copy(After:=ワークシート名(選択したシートの右側), _
Before:=ワークシート名(選択したシートの左側)
シートを移動する
(指定先は別のブックでも可)
[WorksheetObject].Move(After:=ワークシート名(選択したシートの右側), _
Before:=ワークシート名(選択したシートの左側)
シートを削除する[WorksheetObject].Delete
[RangeObject].End(方向)
定数名値内容
xlUp-4162上へ
xlDown-4121下へ
xlToLeft-4159左へ
xlToRight-4161右へ
セルのメソッド
コピーCopy
Copy Destination:=[copyTo]
切り取りCut
貼り付けPaste
データの削除ClearContents
結合Merge
[RangeObject].Offset([行の数],[列の数])オブジェクト位置から相対的な距離にあるオブジェクトを取得する
[RangeObject].Resize(行数,列数)Rangeオブジェクトから指定した行と列の数だけの範囲のRangeオブジェクトに変更する。
[RangeObject].Find(what,検索キーワード,各種パラメータ,...)

Shapesコレクションのメソッド

メソッド名内容具体例
AddChart2
[Worksheet].Shapes.AddChart2(Style,XlChartType,Left,Top,Width,Height)
指定した種類のグラフをシートに挿入する棒グラフや折れ線グラフを生成
AddLine
[Worksheetobject].Shapes.AddLine([BeginX],[BeginY],[EndX],[EndY])
視点と終点を指定して線を追加する([BeginX:線の視点のX座標]/[BeginY:線の視点のY座標]/[EndX:線の終点のX座標]/[EndY:線の終点のY座標]矢印付き直線を描画
AddShape指定した種類の図形をシートに追加する四角形や楕円などの図形を挿入
AddConnector接続線を追加する(例:曲線や角線)フローチャートでオブジェクト間を接続する
AddTextBoxコメントや説明用のテキストボックスを挿入
AddPicture
AddPicture2
指定された画像ファイルをワークシート上に挿入するPNGやJPEG画像をセル上に配置
AddSmartArtSmartArtグラフィックを追加する組織図やリスト形式のSmartArtを生成
Add3DModel3Dモデルを追加する3D形式のオブジェクトや画像をシート上に配置
AddCallout吹き出し図形を追加する吹き出しでコメントや説明を視覚的に表示
AddCurveベジェ曲線を追加する曲線を描画して複雑な形状を表現

特殊な記述

Application.DisplayAlerts = False確認メッセージを非表示にする
Option Explicit宣言した変数のみを利用可能とする。VBAでは変数を宣言しなくても命令文の中で使用することができる。

トップへ戻る

データ型、演算子

演算子

比較演算子の種類比較の内容
=左辺と右辺が等しいか
<左辺が右辺より小さいか
>左辺が右辺より大きいか
<=左辺が右辺より小さいかまたは等しいか
>=左辺が右辺より大きいかまたは等しいか
<>左辺と右辺が等しくないか
Like パターン文字列パターンに一致する場合にTrue(正規表現の文字列、[#:任意の数字1文字/[!]:[]内の文字列でない場合)

データ型

データ型説明取り得る値の範囲初期値
Integer整数値-32,768 から 32,7670
Long長整数値-2,147,483,648 から 2,147,483,6470
Single単精度浮動小数点数-3.402823E+38 から 3.402823E+380
Double倍精度浮動小数点数-1.79769313486232E+308 から 1.79769313486232E+3080
Currency通貨データ型-922,337,203,685,477.5808 から 922,337,203,685,477.58070
String文字列最大 約20億文字vbNullString
Boolean真偽値True(真) または False(偽)False
Date日付と時刻西暦100年1月1日から 西暦9999年12月31日まで1899/12/30 00:00:00
Objectオブジェクト型セル(Range)やワークシート(Worksheet)など,何らかのオブジェクトNothing
Variant任意のデータ型任意の型全て,場合によっては配列Empty

トップへ戻る

構文


トップへ戻る

VBA関数

関数名機能カテゴリ
Date現在の日付を取得日付・日時
Yearシリアル値から年のみを取得
Month(日付)シリアル値の月を数値型(Integer)で返す
Day(シリアル値)シリアル値の日にちを数値型(Integer)で返す
Len(str)文字列の文字数を取得。文字列操作
Left(str,count)strからcount分の文字を返す
Mid(str,startIndex,count)strのstartIndexで指定した位置からcount分の文字列を抽出する。(1が先頭)
Now()現在の時刻を取得する
StrConv(文字列,変換の種類)文字列を別の種類に変換
種類内容
vbUpperCase大文字に変換
vbLowerCase小文字に変換
vbProperCase各単語の先頭を大文字に変換
vbWide半角から全角文字に変換
vbNarrow全角から半角に変換
vbKatakanaひらがなをカタカナに変換
vbHiraganaカタカナをひらがなに変換
Format(str,formatstring)第一引数で指定した文字列をformatstringで指定した形式に変換する。
Replace文字列を置換
Rnd0~1のランダムな数値を取得数値
Int数値の整数部分を取得
MsgBoxメッセージを表示するその他
LBound(array)最小のindex番号を返す
UBound(array)最大のindex番号を返す

トップへ戻る

グラフの作成

Shapes.AddChart2

引数名内容
XlChartTypeグラフの種類
定数名値内容
xlBarClustered57集合横棒グラフ
xlBarStacked58積み上げ横棒グラフ
xlBarStacked10059100%積み上げ横棒グラフ
xlColumnClustered51集合縦棒グラフ
xlColumnStacked52積み上げ縦棒グラフ
xlColumnStacked10053100%積み上げ縦棒グラフ
xlLineMarkers65マーカー付き折れ線
xlLineMarkersStacked66マーカー付き積み上げ
xlLineMarkersStacked10067マーカー付き100%積み上げ
xlPie5円グラフ
xl3DBarClustered603D集合横棒グラフ
xl3DBarStacked613D積み上げ横棒グラフ
xl3DBarStacked100623D100%積み上げ横棒
xlPyramidColClustered106集合ピラミッド型縦棒
Leftグラフの左端の位置を指定(ポイント)
Topグラフの上端の位置を指定(ポイント)
Widthグラフの幅(ポイント)
Heightグラフの高さ(ポイント)

Chartオブジェクト.SetSourceData

引数名内容
Sorceデータ元の範囲
PlotByデータをプロットする方法を[xlcolumns:データ系列が列/xlRows:データ系列が行]のいずれかで指定
省略時はxlcolumnsとみなす

グラフタイトルを指定

凡例を追加

XlLegendposition
定数名値内容
XlLegendPositionBottom-4107グラフの下
XlLegendPositionCorner2グラフの右上隅
XlLegendPositionCustom-4161任意の位置
XlLegendPositionLeft-4131グラフの左
XlLegendPositionRight-4152グラフの右
XlLegendPositionTop-4160グラフの上

軸ラベルを追加

軸の種類(XlAxisType)
定数名値内容
xlCategory1項目軸(横軸)を指定
xlValue2数値軸(縦軸)を指定
xlSeriesAxes3データ系列を指定
※3Dグラフの場合のみ

定数名値内容
xlPrimary1第1軸(項目軸)
xlSecondary2第2軸を指定

トップへ戻る

フォーム

フォームの作成

  1. 挿入→ユーザーフォーム

UserFormオブジェクト.Show

引数の種類値内容
vbModal1フォーム画面以外が操作不可
vbModeless0フォーム画面以外が操作可

Unload [フォームのオブジェクト名]

ウィンドウを閉じる

ComboBoxオブジェクト.AddItem Item(String),Index(Integer)

プロパティ

プロパティ名
オブジェクト名オブジェクトの名前
Caption表示する文字列
TabIndextabキーを押したときのカーソルが移動する順番
MaxLength入力する最大文字数
IMEMode全角の日本語入力や半角英数字など、入力モードを設定する。
定数名値内容
fmlIMEModeDisable3IMEを起動できなくする
fmlIMEModeHiragana4IMEを全角ひらがな入力モードにする
fmlIMEModeKatakana5IMEを全角カタカナ入力モードにする

トップへ戻る

VBAオブジェクトモデル


オブジェクトブラウザの使い方

  1. VBEを起動する。
  2. [表示」タブ →「オブジェクトブラウザ」をクリック(すると,オブジェクトのひな形であるクラスの一覧が表示されます)。
  3. 見たいオブジェクト(のクラス)またはメソッドやプロパティを,一覧からもしくはキーワード検索機能を用いて探してクリック。
  4. 特定のクラスをクリックすると,そのクラスに属するメソッドとプロパティが一覧表示されます。さらに,メソッドやプロパティをクリックするとその説明が下側のウィンドウに表示されます。
  5. さらに,名前のところで右クリックして「ヘルプ」をクリックするとマイクロソフトのドキュメントページにアクセスでき,より詳しい説明を読むことができます。

トップへ戻る

Wordとの連動

Wordのオブジェクト


トップへ戻る

デバッグの使い方

デバッグ機能はフローチャートなどの工数と整合性を確認するためにも用いることが出来る。

デバッグ機能を用いるための準備

  1. [表示]タブ→[ツールバー]→[デバッグ]をクリック

ウォッチウィンドウに変数やプロパティを登録する方法

  1. 変数を選択し、右クリックし「ウォッチ式の追加」を選択する。
  2. 「ウォッチ式の追加」ダイアログで対象や種類の設定を確認し、OKをクリックする。
  3. 登録が完了すると、ウォッチウィンドウに変数が表示される

ウォッチウィンドウの値の見方

その他の値をチェックする機能

機能名主な機能
イミディエイトウィンドウ指定した変数などの値の変化を記録
カーソルの前まで実行カーソル位置の前までコードを実行
ウォッチ式の編集登録済みのウォッチ式の内容を変更
クイックウォッチ選択した変数や式の値を表示
ローカルウィンドウ現在使用中の変数名と値を一覧表示

デバック機能

  1. 継続(F5):中断した箇所から実行する
  2. ステップイン(F8):一命令ごとにコードを追っていく
  3. ポップアップ:変数の現在の値をポップアップで表示したもの
  4. ウォッチウィンドウ:変数の内容を確認するためのツール

Wordオブジェクトライブラリの参照を設定する

  1. ExcelのVBE(Visual Basic Editor)でメニューから【ツール】→【参照設定】を選択します。
  2. ライブラリファイルのリストの中から「Microsoft Word xx.x Object Library」を見つけてチェックを入れ,【OK】ボタンをクリックします。
  3. これでWordオブジェクトライブラリの参照設定が完了し,Wordの操作が可能になります。なお,こちらの参照設定は,Wordを操作するブックごとに設定する必要がありますのでご注意ください。

テキストファイルの操作

記述説明
FreeFile()利用可能なファイル番号を取得。ファイル番号はVBAがファイルを管理するために必要。
Open filePath For mode As #fileNum ファイルを開く。ファイルがない場合には新規作成される。モードは以下の通り。
モード名称説明備考
Input入力モードファイルを読み込むモード指定したファイルが存在しない場合、エラーが発生する
Output出力モードファイルを書き込むモードファイルが存在する場合、内容が消えて新しいデータが書き込まれる
Append追加モードファイルにデータを追記するモードファイルが存在する場合、既存のテキストは保持され、後ろに新しいテキストが追加される
Randomランダムアクセスモードランダムアクセスモードファイルの読み込み/書き込みの両方が可能
Binaryバイナリモードバイナリデータを操作するためのモードバイナリファイルの読み書きに使用される
Print #fileNum, dataテキストファイルにデータを書き込む
Close #fileNumファイルを閉じる
Line Input #fileNum data指定したファイル番号のファイルオブジェクトからdataで指定した変数へ一行分の文字列を格納する。
EOF(fileNum)指定のファイル番号のファイルが最終行にある場合にはFalse

VBAによる様々な入出力方法

方法長所短所
標準ファイル入出力 関数 -軽量で実行速度が速い。
  • -ファイルの行単位や文字単位で操作可能で,読み書きの細かな制御が可能。
  • -古い環境でも互換性が高い。
-テキスト解析(例:区切り文字処理など)が手動で必要。
  • -ファイルエラー(例: 存在しない,ロックされている)の処理を追加で実装する必要がある。
  • -シフトJISエンコーディング以外に対応できない。
  • Workbooks.OpenText
    • -テキストファイルをExcelに直接インポート可能。
    • -区切り文字やデータ形式を指定して整理されたデータを取得できる。
    • -テキストファイルを部分的に操作したい場合には不向き。
    QueryTables
    • -テキストファイルを外部データソースのように扱え,Excel内でSQL風の操作が可能。
    • -データの自動更新が容易。
    • - 区切り文字に対応した自動解析ができる。
    • - QueryTablesの設定がやや複雑。
    • - 大量データを扱う場合,Excelのパフォーマンスが低下する可能性がある。
    FileSystemObject (FSO)
    • - ファイル操作(存在確認,作成,削除)やフォルダ操作が簡単にできる。
    • - Unicodeサポートにより多言語の文字列にも対応。
    • - オブジェクト指向で拡張性が高い。
    • - 参照設定(Microsoft Scripting Runtime)が必要。
    • - 標準VBAと異なる記述。
    ADO(ActiveX Data Objects)
    • - テキストファイルやデータベースにもアクセスでき,複雑なフィルタリングや並べ替えが可能。
    • - 大量のデータを効率的に処理できる。
    • - 参照設定(Microsoft Scripting Runtime)が必要。
    • - データベースに接続する際には事前設定が必要。
    ADO
    ADOの参照設定
    1. VBAエディタで「ツール」メニューをクリックし,「参照設定」を選択します。
    2. 表示されるリストから「Microsoft ActiveX Data Objects x.x Library」を探し,チェックを入れます(x.xはバージョン番号です。複数ある場合は最も大きな数値のバージョンを入れてください)。
    [ADODB.StreamObject].Charsetプロパティ:ファイルの文字コードを取得設定する。
    [ADODB.StreamObject].LineSeparatorプロパティ:改行コードを取得設定する。
    [ADODB.StreamObject].Openメソッド:ストリームを開く
    [ADODB.StreamObject].LoadFromFile filePathメソッド:filePathで指定したファイルを読み込む
    [ADODB.StreamObject].ReadText(adReadLine)