【閲覧くださっている皆様へ】URLが変わりました。一部転送が完了していない内部リンク先があります。「404 Not Found お探しのページは見つかりませんでした。」という表示になる場合は、"https://bits-lifestyle.com/jigaku-study/●●"から、"https://study.bits-lifestyle.com/●●"へ書き換えてアクセスくださいますよう、お願いいたします。ご迷惑をおかけいたします。

 
スポンサーリンク

プログラミング初心者が練習しながら理解するエクセルマクロ②(変数と型)

ExcelVBA(エクセルマクロ)

こんな方に書いた記事です。

  • プログラミングを勉強するのはマクロ(エクセルVBA)が初めて
  • 初級本を読んで途中からわからなくなった
  • まずはルーティン業務の時短が主な目的である(本格プログラミングというよりは、ざっくりと理解しすぐ使いたい)

「プログラミング初心者が練習しながら理解するエクセルマクロ」を初めて読まれる方はこちら

型ってどういうもの?

マクロ本には、変数を使う時は、

「Dim 変数 as 型」という宣言をしなさいと書いてあります。でも型って何よー。

一番近いのは・・・
Excelシートのこれって見覚えありますか?

詳しくはこちらに書きました

例えば、同じ「=2+3」をセルに入力しても、表示形式が「数値」なら計算できるけれど、「文字列」はただの表示なので計算結果は出てこないですね。

変数を使う時は、同じように「型」を明確に宣言します。

変数の宣言や型って必要なの?

はい、ごめんなさい。私はあまりよく考えずに、本やサイトで「変数の宣言はした方が良い」と書いてあったので素直に従いました。(笑)

私は VBEにて「自動的にOption Explicitが記述される」 オプションにチェックを入れているので、毎回自動で 「Option Explicit 」という文言が記載され、変数があるときに変数の宣言をしないと、エラーになります。

それで改めて調べました。すると私のお世話になっている「Office Tanaka」の記事に下記のようなものがありました。

Office TANAKA - 今さら聞けないVBA[変数って宣言しなくちゃいけないの?]

型はなくても大丈夫だけど、変数の宣言はしないと後が大変。ということですね。(型無しの「Dim 変数」でも成立。)
そういえば、私が躓いていたのも「型」を何にするかいつも迷っているということでした。(毎回一生懸命調べていたのです)

とりあえず、型についてはよくわからなければ一旦後回しにしてもよいと思います。後回しにする方は下記は飛ばしてくださーい。後々必要になったらまたここに戻ってきてくださればと思います。

一方、でもやっぱり 「Dim 変数」は正式でなさそうだし、このままだと後々困るんでしょ。とりあえず勉強しておきたいという方は下にお進みください。

型の種類

型は奥が深いですが、まずは普段の事務作業でよく出てくる型を使えるようにしておきましょう。

Workbook、Worksheet,Rangeなど

そのままです。これらの「オブジェクト」を変数にするときに使います。

Long:整数

個数、人数、金額など、整数の計算などをするときは、こちらの型をつかいます。

ちなみに多くの本には、整数は「Integer」というのが基本として書かれていることが多いです。私も初めは Integer を使っていましたが、そのうち汎用性が高い「Long」を常用するようになりました。
Integer は、桁数が少ない時だけしか使えないので。

改めてしらべてみたところ、処理速度的にも 「Integer」 を使う意味はないそうです。。。

詳しくはこちらに書いてありました

Integer型とLong型はどちらを使うべき? | VBA性能向上委員会
Integer型とLong型は、どちらを使えば良いかわかりますか?どちらがより良いか、かつその理由を解説します。

Date:日付

日付には色々な表示形式がありますが、型についてはこれ1種類です。

String:文字列

上記以外なら、とりあえずStringとしてしまいましょう。(問題があればエラーが出るはず)

変数の宣言・指定の仕方

数学の証明で、最初に「nは整数とおく」と宣言しますよね。それと同じことだとお考えください。

多くのプログラミング言語では、変数の宣言が必要なので、他のプログラミング言語を学習する予定のある方は、癖づけておくと良いです。(「型」の重要度合いは言語によりけり)

そもそも何を変数とおくのか

分からなければ、変数を置かずに、まず処理についてのコードを書いていき、何度も同じコードを使うなあという時が出てきたら、それを変数で置いていきましょう。変数の置き方については、前回の記事をご参考に。

変数の命名の仕方

変数を日本語で命名することも可能です。その方が分かりやすいかもしれません。

Dim 社員リストシート1 As String

しかし、書いているうちに「日本語⇔英数字」の切り替えが面倒くさくなり、変数も英数字で命名するようになりました。いろいろなサイトを見ても日本語で命名している方はほとんどいないようです。

Dim sht_lst1 As String

明確な決まりはありませんので、逆に迷うところです。
大切なのは、あとで見ても分かりやすい点です。職場で使う場合はそのルールに合わせるようにします。

1人で使うときは自分がわかればよいですが、一般的な省略方法は知っておいて損はないです。今回は 私の書き方を説明します。

  • 英単語を子音だけにして短縮。
    ※上記の例であれば、sheet→sht list→lstと省略。
  • 小文字にする。(ぱっと見ですぐ変数とわかるため)
  • オブジェクト_オブジェクトの名前 の順で
    オブジェクトとは、Workbook,sheet,cellなどのことです。
    オブジェクトがない時は、省略。(例 Dim n As String)

コードを書く順番

Sub 処理A() 

Dim sht_lst1 as String '①変数の宣言 「Dim 変数 as 型」
Set sht_lst1 =Thisworkbook.Worksheet("社員リストシート1") '②変数の指定 
'③処理を書く

②について、 オブジェクト(Workbook,sheet,cellなど)の時はSetを使って指定します。オブジェクトでなく、単なる数値や文字列を変数にする際は「=」で結ぶだけでよいです。

変数の宣言:構文の練習

練習① 前回書いた下記のコードについて、共通部分を変数に書き換え、変数を宣言してください。

Thisworkbook.sheets(1).Range(“A1”).Value=1
Thisworkbook.sheets(1).Range(“A2”).Value=2
Thisworkbook.sheets(1).Range(“A3”).Value=3
答えをクリック

Dim sht_1 as Worksheet
Set sht_1=Thisworkbook.sheets(1)

 sht_1.Range(“A1”).Value=1
 sht_1.Range(“A2”).Value=2
 sht_1.Range(“A3”).Value=3

練習② 下記のコードについて、共通部分を変数に書き換え、変数を宣言してください。

①の類題です。

Thisworkbook.sheets(1).Range(“B2:C3”).Select
Thisworkbook.sheets(1).Range(“B2:C3”).Font.Fontsize=16
Thisworkbook.sheets(1).Range(“B2:C3”).ColorIndex=3
答えをクリック

Dim rng_b2c3 as Range
Set rng_b2c3=Thisworkbook.sheets(1).Range(“B2:C3”)

rng_b2c3.select
rng_b2c3.Font.Fontsize=16
rng_b2c3.ColorIndex=3

変数の名前が長いですが、区別をつける必要がないのであればrngだけでもよいと思います。

練習③ 下記のコードについて、共通部分を変数に書き換え、変数を宣言してください。

類題ですが、ややこしいので注意。

Thisworkbook.sheets(Thisworkbook.Worksheets.Count).Select
Thisworkbook.sheets(Thisworkbook.Worksheets.Count).Range(“B2”)=16
Thisworkbook.sheets(Thisworkbook.Worksheets.Count).Range(“B2”).ColorIndex=3

※Thisworkbook.Worksheets.Count :このワークブックのシート数の合計

ヒント

変数を2つ使ってみましょう。
答えをクリック

Dim bk as Workbook
Set bk=Thisworkbook

Dim as Long
=bk.Worksheets.Count

bk().Select
bk().Range(“B2”)=16
bk().Range(“B2”).ColorIndex=3

※まずThisworkbookが何度も出てくるので、bkと置きました。
さらに、何度も出てくるbk.Worksheets.Countも変数にするとすっきり。このように変数の中でさらに変数を設定することもできます。

これでも動きますが、一般的に、変数の宣言は最初にまとめてする必要があるので、下記のように並べ替えます。

Dim bk as Workbook
Dim as Long

Set bk=Thisworkbook
=bk.Worksheets.Count

bk().Select
bk().Range(“B2”)=16
bk().Range(“B2”).ColorIndex=3

変数について、ぼんやりとでも、わかってきていただけたら嬉しいです。

コメント

WP Twitter Auto Publish Powered By : XYZScripts.com
タイトルとURLをコピーしました