選択範囲に 第n月と、第m日を 自動挿入しよう

Pocket

選択範囲に 第n月と、第m日を 自動挿入しよう
選択範囲に第n月と、第m日を自動挿入しよう

今回の主題のプログラムの実行結果画面

第n月行と第m日列
第n月行と第m日列

今回、議題にしている日本語VBAプログラムの期待する実行結果の画面は上図のようになります。

  • 選択範囲の第1行には、各月が記入される。
  • 選択範囲の第1列には、各日が記入される。ただし、第1行目はスキップされ、第2行目から記入される。

なお、今回のサンプルコードの実行には、「エクセルVBA日本語化」のver0.13以上が必要です。

ver0.13は、2017/2/17時点で、ベクターに公開申請中です。

また、以下のページからver0.13 beta版とver0.13.2 beta2版をダウンロードできます。

「エクセルVBA日本語化」のインストール方法については、以下のURLを参照してください。

また、VBAを編集する画面を開くには、以下のURLを参照してくだい。

「ALT」キーを押しながら、「F11」キーを押すと、VBAの画面が開きます。その後、「標準モジュール」というVBAを書くシートを作成します。

レッスン

練習その1 整数に接頭辞と接尾辞をつけることのできる「整数」クラス」

日本語VBAでは、「整数クラス」の変数を利用できます。

この「整数クラス」の変数は、以下のようにして、接頭辞、接尾辞を設定できます。

(以下の例では、接頭辞を”第”に、接尾辞を”月”にしてい、ます)

上記コードを実行すると、「g_道具.表示」によって、変数の値「w_整数.文字列化」が以下のように表示されます。

第0月と表示されることを確認
第0月と表示されることを確認

「w_整数.接頭辞を設定 “第”」と、「w_整数.接尾辞を設定 “月”」のメソッドを使用し、接頭辞、接尾辞を設定しました。

そのため、「w_整数.文字列化」メソッドを呼んだ場合は、「第0月」と表示されています。

練習その2 第1行目のみ選択する。その例として、第1行のみオレンジの背景にする

選択範囲の第1行目のみに「各n月」を記入するには、選択範囲の第1行目のみ選択できないといけません。

これは、第1列目に「各m日」を記入する場合も同じです。

では、選択範囲の第1行目のみを選択する日本語VBAコードを見ていきましょう。

「g_道具.セル.選択範囲(, , 1, 0)」に注目してください。

この「選択範囲(」まで入力した際に、以下のような黄色い引数入力ヘルプが表示されます。

引数入力ヘルプ
引数入力ヘルプ

ここでは、第1引数「背景パターン指定」と、第2引数「ステップ数」の指定を省略し、第3引数の「y行目」に1を、第4引数の「x列目」に0を指定しています。

「y行目」「x列目」に0を指定すると、その指定は無視されます。

この日本語VBAの実行結果は以下のようになります。

第1行目のみ選択しオレンジの背景色にする
第1行目のみ選択しオレンジの背景色にする

正しく、第1行目のみ選択されていますね。

演習 第1行目に「第n月」を入力

では、練習02で見てきたように、選択範囲中で第1行目を選択します。

選択範囲の後の「セルごとにサブルーチン呼び出し」メソッドで、選択範囲の第1行目のセルのみ、「月埋める」メソッドが呼び出されます。

選択範囲の第1行目のセルがそれぞれ順番に「月埋める」メソッドを呼び出します。

「月埋める」メソッドには呼び出し元のセル(w_セル)と、現在の第n月目のnを保持する変数「w_整数」が与えられます。

「月埋める」メソッドでは、「w_整数.増やす」により、0、1、2、3、・・・、と順番に1呼び出しに1ずつカウントアップしています。

また、「w_セル.値 = w_整数.文字列化」により、呼び出し元のセルの値に、「第n月」という文字列を代入しています。

上記日本語VBAのコードの実行結果は、以下のようになります。

1行目に「第n月」と入力
1行目に「第n月」と入力

選択範囲中の1列目から8列目まで、順番に「第n月」とnがカウントアップされて記入されていますね。

演習 第1列目に「第n日」を入力

次に、第1列目に「第m日」を入力していきます。

今回の選択範囲は「選択範囲(, , 0, 1)」で、選択範囲中の第1列目を選択します。

「セルごとにサブルーチン呼び出し」メソッドにより、選択範囲の第1列目の各セルが順番に「日埋める」メソッドを呼び出します。

そして「日埋める」メソッドではセルの値が空白の場合のみ、セルに「第n日」(nは「w_整数.増やす」により1つずつ増えて行きます)が記入されます。

すでにセルに「第1月」などが入力されていた場合は、そのセルには「第n日」は記入されないことに注意してください。

上記日本語VBAのコードの実行結果は、以下のようになります。

選択範囲に「第n月」行、「第m日」列を自動記入する
選択範囲に「第n月」行、「第m日」列を自動記入する

選択範囲中の第1行目が、1列目から8列目まで、順番に「第n月」とnがカウントアップされて記入されています。

選択範囲中の第1列目が、第2行目から第16行目まで、順番に「第m日」とmがカウントアップされて記入されています。

第1行目がスキップされているのは、「日埋める」メソッドではセルの値が空白の場合のみ、「第m日」を設定するようにしていたためでした。

結論

今回の日本語VBAは、少々ややこしい、というかちょっと難しい概念を使って、コードを書いていました。

  • 「g_道具.セル.選択範囲(, , 0, 1).セルごとにサブルーチン呼び出し」による該当セルのみ「月埋める」や「日埋める」を呼び出すこと
  • 「月埋める」や「日埋める」は、「セルごとにサブルーチン呼び出し」に指定して、後で呼び出されるという「コールバック(呼び戻す)サブルーチン」というプログラミング言語では少々高度な概念
  • 「If w_セル.値 = “” Then ~ End If 」により、すでに「第1月」などと記入されているセルは「第m日」などは記入しないこと

と、以上のような難しさがありました。

しかし、慣れてくれば、非常に便利な機能となります。

また、今後も解説していきますので、だんだんと慣れてきてください。

The following two tabs change content below.
KaBA@フリーランス修行中

KaBA@フリーランス修行中

こんにちは!IT業界で勤めて17年くらい務めています。プログラミング大好きやろーです。 自分も独学でC言語を覚えIT会社に就職しました。その後紆余曲折を経て、VB6.0、VBA、Perl、C#、HTML、CSS、JavaScript、PHPなどを覚えていきました。全部C言語の独学時の経験がベースとなって、学習曲線が良いカーブを描いていました。 情報工学科を出ていなくても、独学でエンジニアは育つことができると思います! このブログで皆さんがプログラミングに興味を持たれるのを心待ちにしています! 頑張って覚えられてください!よろしくお願いします。 趣味は読書で、小宮一慶さんや松下幸之助さんなど著名人の本を読んでいる他、赤川次郎さんの三毛猫ホームズシリーズ司馬遼太郎吉川英治さんの三国志などが好きです。