機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > 今さら聞けないVBA

スペースとかカンマとかピリオドとか分かりません



ビギナーにVBAを教えていると、「どこにスペースを入れたらいいんですか?」とか「ピリオドはどこで使うんですか?」などの質問を受けることがあります。それも、結構な割合で。上級者にとっては当たり前でも、意外とこういうことでビギナーは悩むんですよね。ちなみに、括弧を付けるときと付けないときのルールは、下記のページをご覧ください。


ここでは、ピリオドスペースカンマを使うところについて解説します。

ピリオドを使うところ


最初に整理しておきます。
VBAの構文は、次の3つに分類できます。

  1. オブジェクト式
  2. ステートメント
  3. 関数

「オブジェクト式」とは、Excelを操作する構文です。たとえば、セルに値を代入したり、ワークシートを挿入したり、ブックを開いたり・・・などなど。「ステートメント」は、マクロの実行を制御する構文です。条件によって処理を分岐するIf Then Elseステートメントとか、繰り返しのFor Nextステートメント、変数を宣言するDimステートメントなどなど。最後の「関数」は、ワークシート上で使うSUM関数やVLOOKUP関数のように、決められた引数を与えると、いつも決められた結果を返すものです。VBA特有の関数では、たとえば、InStr関数とかSplit関数などがあります。



上図のコードは、アクティブシートのセル範囲A1:A10に入力されている文字列を、「¥」で分割して、2枚目のワークシートの、B列とC列に代入するマクロです。このコードの、青文字が「オブジェクト式」、赤文字が「ステートメント」、緑文字が「関数」です。

これを見ても分かるように、ピリオドはオブジェクト式で使います。オブジェクト式では、操作の対象(オブジェクト)が階層構造で表されます。たとえば、

Book1Sheet1セルA1文字色を赤くする

なら、次のようにします。

Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Font.ColorIndex = 3

これは、いわば次のようなものです。

○○中学1年3組田中服の色を赤くする

○○中学.1年.3組.田中.服の色 = 赤

このように、オブジェクト式では、単語と単語をピリオドで結びます。
ピリオドは、ここでしか使いません。あぁ、もちろん「Book1.xlsx」のように拡張子を意味するピリオドや、「3.1415」など小数を表す小数点は別ですよ。

ピリオドを打ち間違えたらどうなるか


次のコードは、セルA1に123という数値を代入しています。RangeオブジェクトValueプロパティということで、ピリオドが使われています。

Range("A1").Value = 123

VBAのコードを入力中、ピリオドを打ち間違えたらどうなるのでしょう。

  • ピリオドを打ち忘れたら



  • ピリオドが多かったら



  • ピリオドとカンマを間違えたら

    Enterキーを押しただけではコンパイルエラーになりませんが、このプロシージャを実行すると




上記のようなエラーになります。ただし、間違えた場所や、間違え方によっては、異なるエラーメッセージが表示されることもあります。

ピリオドから始まる書き方


上記のようにピリオドは、オブジェクト式で使います。一般的には、



のように単語と単語の区切りに使います。ただし、Withステートメントを使うときだけは、ピリオドから始まる書き方をします。



Withステートメントの詳しい解説は、下記ページをご覧ください。


スペースを使うところ


「どこにスペースを使うか分かりません」という質問も、よく聞きます。冒頭にお見せしたコードでは、たとえばスペースは次のように使われています。



VBAで、マクロのソースコードとして認識される語は、次のように分類されます。

  1. VBAで定められている単語
    Range や Dim や If や InStr など

  2. 変数名や定数名
    vbCrLf や msoTextEffect など

  3. 一部の記号
    ( ) や . や , や * など

  4. 数値
    1 や 2 や 3 や 4 など

「1.VBAで定められている単語」は、オブジェクトとかプロパティとかメソッドとか、ステートメントとか関数とかです。「2.変数名や定数名」は、上記のように、あらかじめVBAで定義されている定数だけでなく、ユーザーが自由に定義できる変数名や定数名もあります。文字列の"Sheet1"とか"A1"などは、「3.一部の記号」で使用できる""で囲まれた任意の文字列です。もちろんスペースも、この「3.一部の記号」に含まれます。

「1.VBAで定められている単語」と「2.変数名や定数名」を合わせて「単語」と考えれば、スペースが使われるのは「単語」「記号」「数値」を区切るところです。つまり、

  • 単語と単語の間
  • 単語と記号の間
  • 単語と数値の間
  • 記号と数値の間
  • 記号と記号の間

ということです。基本的に、スペースはVBEが自動的に調整してくれます。スペースが足りないときは自動的に挿入してくれますし、スペースが多すぎるときは1つにまとめてくれます。ですから、それほど意識をする必要はないのですが、いくつかエラーになるケースがありますので、ご紹介します。

  • オブジェクト式はスペースを使わない

    オブジェクト式とは、Excelを操作するような命令です。セルに値を代入するとか、新しいワークシートを挿入するとか、ブックを開くとか、グラフを作るとか・・・このようなとき、オブジェクトやプロパティやメソッドを、ピリオドで区切ります。このとき、単語とピリオドの間には、スペースを入れません。



    ちなみに、ピリオドのに入れたスペースは、行末でEnterキーを押したときに、VBEが自動的に削除してくれますが、ピリオドのにスペースが入っていると、行末でEnterキーを押したとき、エラーになります。



  • For Next は To の右にスペースを入れる

    繰り返しのステートメントFor Nextは、次のように書きます。



    たとえば、こんな感じです。



    それぞれ、単語や記号、数値はスペースで区切られています。このとき、Toのにスペースを入れ忘れたときは、行末でEnterキーを押したとき、VBEが自動的に補完してくれます。しかし、Toのにスペースがないと、行末でEnterキーを押したとき、エラーになります。



  • &の左にはスペースを入れる

    数値を計算する+や*などの記号を演算子と呼びます。演算子の両側にはスペースを入れます。もしスペースを入れ忘れたときは、行末でEnterキーを押したとき、VBEが自動的に補完してくれます。



    しかし、文字列を結合する演算子&は、にスペースを入れ忘れると、行末でEnterキーをおしたとき、エラーになります。



    このとき、&の後ろが選択されますが、原因は&のにスペースがないことです。

    VBAには「型指定文字」という機能があります。一般的に、変数を宣言するときは、Asの後ろに型を表すキーワードを記述します。次の例は、Aという文字列型の変数を宣言します。

    Dim A As String
    

    ところが、型指定文字を使うと、Asの代わりに、記号を指定することで、変数の型を指定できます。Aという文字列型の変数は、次のようにも宣言できます。

    Sub Sample()
        Dim A$
        MsgBox TypeName(A$)
    End Sub
    



    VBAの型指定文字には、次のような種類があります。

    型指定文字
    %  Integer
    &  Long
    !  Single
    #  Double
    @  Currency
    $  String

    この中で、演算子としても使われている記号は、文字列を結合するときに使う「&」です。つまり、

    Range("A1").Value = A& B
    

    の「A&」はLong(長整数型)の変数とみなされたため、エラーになりました。

基本的に、多く入力したスペースは、VBEが自動的に削除してくれることが多いです。また、スペースが不足しているところも、けっこうVBEが補完してくれます。ですから、あまり難しく考えずに、迷ったら「とりあえずスペース入れとけ」みたいな感じでよろしいのでは。マクロをたくさん作っていれば、そのうち慣れますよ。

カンマを使うところ


カンマは、複数の項目を区切るときの記号として使われます。VBAのコードで"区切るもの"と言えば、ほとんどは引数(オプション、パラメータなどとも呼びます)です。たとえば、Rangeオブジェクトを返すCellsプロパティは、行と列の2つの引数を取ります。

Cells(1, 2)

ちなみに、カンマの後ろにはスペースが入りますが、これはVBEが自動的に入れてくれます。
ほかにも、複数の引数を取るメソッドや

Set FoundCell = Cells.Find(What:="tanaka", Lookat:=xlWhole)

複数の引数を取る関数もあります。

n = InStr(Range("A1"), "\")


まとめ


ということで、ピリオド、スペース、カンマを使うところについて解説しましたが、理屈で覚えるよりも、身体で覚えてください。たくさんマクロを作っていけば、そのうち適切な使い方が身につきます。そんなもんです。あまり難しく考えない方がいいですよ。



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