[マクロ]  変数とデータ型、Forループ

〖 [マクロ] はじめてのプログラミング 〗で紹介したとおり、プログラムは、
   Sub プログラム名()
     :
   End Sub
の間に書くが、前回紹介した処理のように、同じ処理を繰り返すときには、「変数」を使って、ループを組む方が良い。

前回と同じ例で、各行で発明者数が3人以上かどうかを判定するプログラムを書いてみよう。

「行」を指定する変数を使って、2行目から11行目に同じ処理を繰り返す。

〔 Dim(変数宣言)文 〕

「変数」は「この変数を使いますよ」という意味で、予め「宣言」しておく。このときに、その変数のデータ型も合わせて宣言する。

Dim 変数名 As データ型

 

主なデータ型と使い方

データ型 説明 使い方
Integer 整数(-32,768~32,767) 行や列の指定
Long 整数(-2,147,483,648~2,147,483,648) 大きな数の場合
String 文字列 出願人名など
Date 日付 出願日など

ここで紹介したのは、特許情報分析でよく使うものだけ。他にもたくさんのデータ型がある。
詳しくはこちら(Microsoftのサポート)

〔Forループ〕

同じ処理を繰り返すには、「ループ」という命令を使うが、代表的なものが「Forループ」

For 変数=初期値 To 最終値 Step 増分
    繰り返したい処理の内容
Next 変数

この他、Do While,Do Untilなどいろいろなループがある。

〔Cellsプロパティ〕

前回は「Range(“G2”)」のようにセル名を文字列「”G2″」で指定したが、2行目、3行目、・・・のように、行と列を数値で指定したいので、「Cellsプロパティ」を使う。

Worksheet(“Sheet1”).Cells(,).value

上のように、前側にシートを指定する(Worksheet()やActiveSheet)をドット”.”を使って連結し、後方にはそのセルの属性をドット”.”を使って連結する。

後方に連結する属性には、値(value)の他、フォント(Font.Name, Font.Size)などがある。内容をクリアする”ClearContents”などようなメソッドを連結することもできる。
詳しくはこちら(Microsoftのサポート)

〔プログラム〕

いよいよプログラムを書いてみよう。

Sub step_2()
    Dim row As Integer
    Cells(1, 7) = “発明者数判定
    For row = 2 To 11
        If Cells(row, 6) >= 3 Then
            Cells(row, 7) = “多”
        Else
            Cells(row, 7) = “少”
        End If
    Next row
End Sub

プログラム名は、前回の”step_1″に続いて”step_2″としてみた。”step_1″の”End Sub”の後ろに改行して続けて書いていけば良い。

Dim row As Integer
行を指定する変数「row」を整数(Integer)として宣言している。まれに”Integer”の数値範囲を超える行数になる場合がある。そのときは”Long”を使う。

Cells(1, 7) = “発明者数判定”
“G1″セルは、1行目、7列目なので、Cells(1, 7)と指定して、書き込みたい文字列を入力している。上の〔Cellsプロパティ〕では前側にシート指定、後方に属性を指定するように説明したが、省略可能な場合があるので、とりあえず指定しないで試してみると良い。元に戻れる工夫(コピーを作っておくとか)をして、うまくいかなかったら、Googleなどで調べて対策すればよい。
“G”列を「7行目」と読み替えるのが少々面倒だが、”A列”から順に1, 2, 3, ・・・の連続値を入力した行を作っておくなど、工夫すれば良い。

For row = 2 To 11
  :
Next row
行の変数”row”を2から11まで増やしていくForループ。増分が1なら”Step”は省略して良い。

If Cells(row, 6) >= 3 Then
        Cells(row, 7) = “多”
Else
        Cells(row, 7) = “少”
End If
セルを指定する方法を”Range”から”Cell”に変えただけで、前回のプログラムと同じ処理。

コメントを残す

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