第2講 変数の学習
第10話 セルの選択の仕方
001
B4を選択したいときには、
  Range("B4").Select
という方法で説明してきましたが、
もう一つ選択方法があります。
それは、
  Cells(4, 2).Select
です。
Range("B4")は列(縦列)・行(横列)の順で表すのに対して、
Cells(4, 2).Selectは行・列の順で表し、
逆順になります。
ですが、第3講などで学ぶFor文で制御できるのは、
Cells(4, 2)の方ですので、
これからはCells(*, *)を主に使うことにします。
ですから、
  Range("B4") = a

  Cells(4, 2) = a
とします。

さて、
001
B4からB8まで選択するときは、Rangeなら
  Range("B4:B8").Select
でしたが、Cellsの方だとどうなるかと申しますと、
  Range("Cells(4, 2):Cells(8, 2)").Select
となります。混合ですね。

では、皆さん
002
B4からD8まで選択するときには、どうなりますか。
答えを30行下に書きます。
























答え
  Range("B4:D8").Select
  Range("Cells(4, 2):Cells(8, 4)").Select
です。

では、
003
4行目から7行目まで選択するときはどうでしょうか。
このときは、Rowsを使い次のようにします。
  Rows("4:7").Select
本講義では消去のコードを以降では、
Private Sub CommandButton2_Click()
  Rows("4:2000").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
とします。
こうすれば4行目から2000行目までのセルをクリア(空)にしてくれます。
2000行目まで消去するなんて無駄ではとお思いになるかもしれませんが、
一瞬です。
処理時間は0秒に限りなく等しいのです。
上のように消去のコードを変更しておけば、
消去の方は毎回変更しなくても済みます。

第2講最後の話題です。
では、
004
B列からD列まで選択するにはどうしたらよいかと申しますと、
  Columns("B:D").Select
です。

ごめんなさい。
最後と言いましたが、もう一つ忘れていました。
それは、
005
のように飛び飛びに選択する方法です。
このように選択するには、
  Range("B4, B7, C8, D6").Select
とします。

さて、変数の学習は以上にしまして、
第3講では繰り返し処理の1つであるFor文に進みたいと思います。

本来はこの講で扱うべき課題でしたが、
すでに10話に達していますので、
次の課題を第3講第1話の課題にしたいと思います。
1+2+3+・・・+10
をたった1つの変数で実現して、
実行画面が
006
となるようにして下さい。
ヒントは、第2講第7話を少し変えた
Private Sub CommandButton1_Click()
  Dim w As String
'wは文字を累積していく変数
  w = ""
'wを何もない状態に初期化
  w = "太郎は"
  w = w + "明るい"
  w = w + "性格"
  w = w + "です。"
  Range("B4") = w
End Sub
Private Sub CommandButton2_Click()
  Range("B4").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
参考ダウンロード添付ファイル
  実行結果
  002  

です。

最初の代入を初期化と言います。
文字型変数であれば、
文字における数値の0に相当する""で初期化しておいた方がよいのです。
整数型変数であれば0に初期化しておくことを習慣にしてください。
本来は、VBやVBAの場合は変数を宣言した段階で、
整数型であれば0に初期化されていますし、
文字型変数であれば""に初期化されていますが、
C言語では、0などには初期化されておらず、
代入する前にその変数を使って値などを表示させようとすると、
実行エラーを起こします。
また、VBAでは0などに初期化されていますので、
実行エラーは致しませんが、
2回目以降のプログラム実行のときにおかしな動きをすることがあります。
それ以前の回で実行したときに代入した値が残っている場合があるからです。
ですから、必ず""や0に初期化しておいた方がよいのです。

       'wを何もない状態に初期化
などを注釈文と言います。
これをコンピュータは読み飛ばします。
つまり、この文があってもなくても実行結果に違いはありません。
では、何のためにあるのでしょうか。
それは、人間のためです。
コードの解説をするためのものです。
プログラムコードを読む他の人ばかりではなく、
自分のためにも必要です。
今は単純なコードしか組んでいませんが、
数独自動生成ソフトになるとかなり高度なプログラミングコードになります。
組んだ当初はコードの意味がわかっても少し時間がたつと、
注釈文による解説がないと、
理解が困難になります。
私は、タイピングの腕が悪い頃にプログラミングを始めてしまい
(今でも余り腕がよくないのであちらこちらにタイピングミスがあり皆さんにご迷惑をおかけしています)、
ついつい面倒で注釈文を省略してしまう悪しき習慣を身につけてしまいました。
そのために、様々なプログラミングにおいて、
プログラミングコードの意味がわからずに、
常に苦労してきました。
数独自動生成ソフト開発において後に組むことになる3on3のコードは、
自分で組んだにもかかわらず、
意味がわからずにかなり苦戦してしまいました。
ですから、こまめに注釈文を入れるようにして下さい。

変数名はただの箱の名前にすぎませんので、
禁則さえ犯さなければ自由につけられます。
書籍やサイトはすべて何の変数であるかわかるように、
a_integer
w-Integer
などとすべきであるとしていますが、
私はこの立場をとりません。
理由は、w-Integerなどと書くと初心者はこれ自体に意味があると思ってしまうからです。
変数名はペットの名前と同じで他と区別する以外の意味は持っていません。
引っ越しのときの段ボールに何も書いておかないと、
何の段ボールだかわからなくなりますね。
そこで、下着とか本とかマジックで書き込みますね。
それに対応するものが変数名です。
変数名を1文字が2文字程度にする理由は、注釈文を入れれば済むことだからです。
  Dim w As Integer
'wは整数型変数
'wは整数型変数をあちらこちらにコピペしておけばよいのです。
一般的なプログラム言語の使用規則は、
①半角のアルファベットまたは数字を使用する。
②アルファベット以外で使用できるのは、
  -,_(キーボードの右のShiftの隣にある「ろ」をShiftを押しながら押すと出てきます。)
③数字は先頭に使ってはならない。a1,w1aは可、1a,2w1は不可。
ただし、前にも申し上げました通り、
VBAの場合には全角を使えます。
ですから、
  Dim 整数の和を累積していく変数 As Integer
が可になります。


第9話へ 第3講第1話へ

トップへ