見出し画像

介護事業者のためのExcelVBA入門講座④~セルを編集してみよう(導入編)~

前回は、VBEを使ったプログラミング方法をご紹介しました。

今回は、ExcelVBAの肝であり、基本の基本であるセルを操作していきましょう。

ExcelVBAは、オブジェクト指向の言語です。

肝であるオブジェクト指向をすっ飛ばして、操作方法だけ覚えてしまっても、今後ほかのプログラミング言語を学びたいときや、VBAをさらに深く学びたいときに応用が利きません。

理解度を上げていくためにも、少し、ここで字数を割いておきたいと思います。

オブジェクト指向とは「ブックや、シート、セルを直感的に操作できる便利な機能」と説明してきました。

この「オブジェクト」について、もう少し詳しく解説しておきたいと思います。

オブジェクトは直すると「物」です。

コンピュータの世界には「抽象的概念」は存在しない

「コンピュータ」の世界には、「物」という概念は存在しません。

というか、「概念」自体が存在しません。


「コンピュータ」からみたら、どんなプログラムも「見分けがつきません」。

今、自分が実行しているのが「見積書作成ツール」なのか「家計簿管理ツール」なのか、コンピュータは「理解できません」。

「コンピュータ」には莫大な量の記憶領域があり、「忘れること」がありません。

さらに、その記憶を、意図的に選択し、呼び出すことができるので、どれだけ大きなプログラムであっても、記憶しているものを順々に実行していくだけでよいのです。

一方、我々人間はどうでしょうか。

人間の「記憶」は流動的であり、脳内のメモリーは機械的に「拡張」することはできません。コンピュータのように、どのような細かいこともすべて覚えていて、また、呼び出したいときに特定の記憶を指定し、呼び出すことはできません。

それを解決するのが、「抽象化」という考え方です。

テーブルの上にある「りんご」を見て、人間は「りんご」だ、と考えます。(至極当たり前ですが)

でも、よく考えると物理的な世界においては、「りんご」には個体差があります。

「りんご1」「りんご2」「りんご3」…「りんごn」…と「区別」できるものです。

ただし、この方法では、世界を理解するのに、非効率です。

「りんご1」と「りんご2」の差を覚えておくのに、おそらく「何万箇所」の特徴を記憶しておく必要がありますから。

なので、我々は、「りんご」とまとめて表現することで、この世の物事を理解しています。

また、さらに「りんご」「みかん」「ぶどう」などをまとめて、その上位概念である「果物」として理解しています。

このように、「物」の共通的な部分を抽出して、分類する機能のことを

「抽象化」

といいます。

我々人間は、「抽象化」された「物」を操作するということに、なじみが深いのです。

「オブジェクト指向」は、誰のためのもの?

「オブジェクト指向」とは、誰のためのものなのか、というと、「プログラマー」=「人間」のため、です。

「オブジェクト」とは、本来、無機質な「プログラム」を抽象化し、「物」のように扱うことで、直感的に物事をあつかう(人間になじみのある思考法)ことができ、またコードを共通化することで「再利用性」を高めることができます。

人間が、別々の「リンゴn」を見ても、「あ、リンゴだ」と思えることと同じですね。

VBAでのオブジェクトの扱い方

VBAでは、以下のような分類があります。まずこれをしっかりと理解しておきましょう。(他のプログラミング言語でも、指し示す用語は変わりますが、構成はほとんど同じです。)

①オブジェクト

 ブック、シート、セルなど、「操作の対象」となるもの

②プロパティ

 「①オブジェクト」に付随する、情報を指すもの

 ※例えば、「セル」の「色」や「値」など

③メソッド

 オブジェクトが行うことのできる「ふるまい」のことです

上記の分類を理解するために、「人間」というオブジェクトについて考えてみましょう。

オブジェクト:人間

プロパティ:身長、体重、性別、足の長さ、状態(しゃがんでいる、立っている)

メソッド:しゃべる、しゃがむ、立ち上がる、、etc

というようなイメージとなります。

セルを操作してみよう!

さて、やっと本題に入ります。

「セル」を操作していきますが、VBAで、セルは「Range」と定義されています。

この「Range」が、「セル」を示す「オブジェクト」です。

VBEを開いて、標準モジュールに、以下のプログラムを記載し、実行してみてください。

※VBE、標準モジュールについては、第3回目の講座を参照してください。

https://note.mu/teradosh/n/n1c331bc027c9?magazine_key=mf502928709f3

<プログラム>

Sub セルの操作()

Range("A1").Value = 1

End Sub

<実行結果>

「A1」のセルに、「1」という値が入力されましたね。

「Range("A1").Value = 1」を、「分解」してみていきましょう。

「Range」は、セルを指すオブジェクトです。

Rangeの()内には、「セルの位置」を記載します。

A1、B2などと記載し、それをダブルコーテーション("")で括ります。

なお、Rangeは、1つのセルだけではなく、複数のセルを選択できます。

プログラムを「 Range("A2:B2").Value = 1」と書き換えて、再度実行してみてください。

A2とB2に1が入力されましたね。このように、セルは1セル単位と、範囲指定と2種類の指定が可能です。

次の「.Value」ですが、これが「プロパティ」です。その名の通り、セルの「値」を示す「プロパティ」となります。

「.」でつなぐことで、「Range」オブジェクトの、プロパティであることを示します。これは「記法」なので、覚えるしかありません。

次に「=」について説明します。

プログラミングの勘所 「=」

プログラミングの世界では、「=」は、数学の等式→イコールの意味ではありません。

「=」は、「代入演算子」と呼ばれます。

おそらく、どのプログラミング言語においても、この代入演算子の考え方は同じです。ここでばっちり覚えてしまいましょう!

「x = y」

は、「xとyは同じである」ことを指すのではありません。

(等式のように、「同じであること」を示すには「論理演算子」というものを使うのですが、それはまた別の講座でお伝えします。)

「右」(y)の値を、「左」(x)に、「代入する」という意味になります。

もう一度、プログラムを見てみましょう。

「Range("A1").Value = 1」

左(Rangeオブジェクト(位置はA1))の「値」)に、1を代入する

となります。

これで、セルに「1」が入力されるわけですね。

なお、セルの操作は、実は「Cells」という「プロパティ」を使用することがほとんどです。

「繰り返し処理」で、「行」を1ずつ増加させて、セルを参照したりするのですが、その時に、行、列を指定できるCellsのほうが都合がよいのです。

次回は、Cellsプロパティによるオブジェクトの取得方法と、その操作について説明していきたいと思います。

また、今回紹介したRangeも、厳密に言うと、「オブジェクト」そのものではなく、プロパティなんです、、非常にややこしいので、ひとまず今回講義の通り、覚えておいてもらってよいのですが、その辺りも次回説明します。

合わせて、「変数」というプログラミングを学ぶ上で非常に重要な概念についても、触れていきます。

以下は、補足的な説明となります。

【補足】「Value」プロパティは、省略できる

「Range(”A1")=1」と記載しても、同じ結果が得られます。

これは、代入するときは大体、Valueなんだから、Valueなんだよね、とプログラム側が自動的に補完してくれるから、です。

このように、プログラミングでは、省略できる書き方というのがさまざま存在します。都度、覚えていくとよいでしょう。

職業として、プログラマをしているとその現場現場でルールがあったりします。(混乱をさけるため、省略はしないなど)

ただ、我々は、プロのプログラマーではありませんから、「省略できるんだな」ぐらいに思っていればOKだと思います。

私は、明示的に「Value」プロパティを記載するようにしています。「Value」は省略するほど手間でもないから、です。

実は、今回紹介したプログラム
→ 「Range("A1").Value = 1」も、なにかが省略されているのです。

それは、次回以降、説明します。

【補足】「記法」は、覚えるしかない!ただ覚えなくていい!(どっちや)

Rangeの()内のA1、セルの位置を「””」で括る必要があるなど、このような言語毎の記法は、「覚えるしかありません。」

ルール通りに記載しないと、プログラムは動いてくれません。そしてその「ルール」は、プログラミング言語の作成者が「決めた」、ただそれだけです。

我々自身がプログラミング言語を一から作成しない限り、作成者のルールに従うしかありませんからね。

ただ、このルールを厳密にすべて覚える必要はありません。

覚えておいたほうが、もちろんプログラミングのスピードはあがりますが、忘れてしまった場合は、リファレンスサイトなどですぐ調べてしまえば問題ありません。

「言語の仕様を細かく覚えること」が、プログラミング学習の肝ではありません。

どのように書けば、何ができるのか、をまずイメージとして、つかんでください。

細部については、都度調べればよいのです。


まとめ

①オブジェクト指向は、「抽象化」で物を理解している人間のためのもの

②セルは「Range」というオブジェクトで表される

③プログラミング学習の肝は細かい仕様を覚えることではなく、「どのように書けば、何ができるのか」をイメージすること


この記事が気に入ったらサポートをしてみませんか?