エクセルマクロは、Visual Basic Application(VBA)という言語を使用した、プログラミングになります。
他のプログラミング言語を使用する場合は、環境を整えるところから始める必要がありますが、エクセルマクロは、エクセルの中に開発環境が含まれていることから、初心者がはじめやすいプログラミング環境です。(エクセルOnlineは、エクセルマクロは対象外です。ローカルのPC環境のみ。)
最近は、小学生からプログラミング教育が開始されます。問題を解決に導く思考力が身につくと注目されているようです。
プログラミングが合う人合わない人は、存在すると思います。思い通りにいかないときにイライラしておさまらない人は、向いていないと思います。多少イライラはしても、気持ちを切り替えて、間違い探しゲームのように、自分の間違いをコツコツ探せる人は向いている人だと思います。あとは、「何でこうなるんだろう?」「どんな仕組みなんだろう?」とか、日々の生活の中でもいろんな仕組みが気になる人は、一番向いている人だと思います。
プログラミング言語の原始的なものは、コンピュータ言語と呼ばれ、コンピュータに命令するための言語です。
プログラミング言語を覚えて使えるようになるということは、ロボットが好きな人は、ロボットに出す命令方法を覚えて「意のままに操れるようになろう!」と捉えてもいいですし、ファンタジーが好きな人であれば、エクセルに「開け!」とか「閉じろ!」という魔法や呪文を覚えて「使ってみよう!」と思えるかどうか。興味を持ち、命令に従って動くエクセルを見て、楽しめるかどうかが鍵になると思います。
あとは、エクセルが思ったように動作してくれなくても、「問題が発生!」→「解いてみよう!」、「事件発生」→「推理してみよう!」、「クエスト発生!」→「クリアしよう!」と、ポジティブに取り組めることが大事です。
思うように動かなかったコードが時間を置いたら、何もしていないのに動くようになるということは、ほとんどありません。基本、問題があって動かないものは解決する必要があり、この動かない原因を調べて解決に導くスキルが注目され、「考える力」を身につけるために、小学生から学ばせようとなったのだと思います。
マクロを書くための環境設定は、マクロの初期設定と基本を確認してください。
エクセルの「マクロの有効化」とマクロを書くエクセルマクロ有効ブック(*.xlsm)の作成ができたら、マクロを書いてみましょう。
シートオブジェクトにコードを書きこみます。
(Visual Basic画面のVBEProjectエクスプローラでSheet1(シート名)をダブルクリックして開く場所。)
事前準備:まずは、エクセルの表側で、セルA1に何か書き込んでおいてください。
そして、Visual Basic側に下記のコードを記述します。下記のようなプログラミング言語で記述する命令文をコードと呼びます。そして、記述することを「コーディングする」といいます。
Sub test1()
Range("B1").Value = Range("A1").Value
End Sub
コードを動作させるには、Sub test1内にカーソルを持ってきて、F5で実行できます。(ツールバーの右向き三角(Playボタン)でも実行できます。メニューバーから実行するのであれば、「実行」の「Sub/ユーザフォームの実行」から実行できます。(補足:Subと限定されていますが、引数の必要のない関数は、Functionであってもこの方法で実行できます。)
コードの解説
イコールの右側を左側にデータを移します。「XXX = YYY」の書き方は、YYYの中身をXXXに入れます。
上記のコードで、セルA1の内容がセルB1に書き込まれます。
仮に、セルB1になにかデータが入っていたとしても、関係なくセルA1の中身で上書きされます。
「Range("").Value」のValue部分は、用意されている機能で「セルの中身」という意味で、文字列でも数値でもValueで扱えます。(補足:エクセルの表示形式機能を使用して、セルの中身と見た目を変えている場合、Valueは中身、Textは見た目を取得できます。Textが使用できるのは、イコールの右辺だけです。Textに対して、代入はできません。)
Sub test2()
Range("B1").Copy
Range("C1").PasteSpecial
'コピー中の枠を解除
Application.CutCopyMode = False
End Sub
コードの解説
ここで、一言一句覚える必要はありません。
コピーやペースト、ソート、検索などは、準備されている機能を呼び出すことで使えるという点だけ理解してもらえればと思います。
上のようなコードをコピーしてご自身のVisual Basic Editor環境に貼り付けてマクロを動作させていると気づけませんが、実際に打ち込んでみると、入力候補が出てくるのが確認できると思います。「Range("A1").」まで打ち込むと、用意されている機能のうち何を呼び出したいのか候補の一覧が表示されます。また、小文字で「Range("A1").copy」と打ち間違えても、エディタ側が「Range("A1").Copy」と自動で訂正してくれます。
セルの持つ機能は、上図の通り、たくさんありますが、よく使うものは限られますので、上から理解する必要はありません。
Sub test3()
Range("B1").Value = Range("A1").Value + 1
Range("B2").Value = "書き込み確認"
Range("B3").Value = "文字列は" & "アンド記号で連結"
Range("B4").Value = "文字列と数字も連結:" & Range("B1").Value
End Sub
コードの解説
セルA1の内容に1を足して、セルB1に書き込む。計算記号は、+(足す) , -(引く) , *(かける) , /(割る) です。
セルB2に文字を書き込む。文字列は、(")ダブルクォーテーションで挟みます。
セルB3は、文字列を連結して代入しています。アンド(&)記号で文字列をつなげます。
セルB4は、文字列と数値(B1セルの値)との連結です。
書き込む文字は変えてみてください。思い通りに変わることを確認してみましょう。
この辺の書き方は、こういうものなんだと、そのまま覚えてください。
変数は、箱に例えられます。自分で箱に名前をつけて、何を格納するための場所なのかをあらかじめ決めておくのが、変数宣言になります。省略もできるので、書かない人もいますが、初心者は書いた方が良いです。変数宣言で数値を入れると決めた変数の中に、文字列を入れようとすると「型が一致しません」というエラーになります。
下記を動作させるための前提上限:セルA1に数値を入れておく
Sub test4()
'変数宣言
'Longは正数型。変数名が「変数L」
Dim 変数L As Long
'
'セルA1に10を足した数を「変数L」に入れる
変数L = Range("A1").Value + 10
'変数「変数L」の中身をセルB1に入れる
Range("B1").Value = 変数L
End Sub
コードの解説
Dim ~ As の間に変数名を書きます。変数名は自分で用途によって名前をつけます。英語も日本語も使えて、両方でも大丈夫です。多くの人が英語を使用するのは、他のプログラミング言語では、英語表記が必須であるためです。画面が英語ばかりはイヤという人は、コメントを増やしたり、コードに日本語も使ってみてください。コメントとは、コードに影響を与えない、文章で、行の先頭にこの記号(')アポストロフィーマークをつけると、一行すべてがコメント扱いになります。
A1セルに数値ではなく、文字列が書かれていると10を足すことができないため、エラーになります。全角の数字もエラーになります。全角の数字は、文字列として扱われます。
わざと間違えてエラーになることを確認してみるのもいいかもしれません。
変数が登場したので、Step実行も使ってみましょう。
変数宣言が終わった後の、「変数L = …」の行にカーソルを合わせて、CtrlキーとF8キーを押すと、カーソルの行まで実行し、止まってくれます。そこから、F8キーを押すと、一行ずつStep実行ができます。
変数Lにマウスポインタを近づけると、ポップアップで中身を教えてくれます。
実行時にポップアップでエラーが発生する場合(エラーの行数を教えてもらえない場合)、問題のないコードをstep実行できます。step実行で進んでいき、問題のある行でstep実行するとポップアップのエラーと同じエラーが発生するため、エラー行を特定することができます。
実行がF5。カーソル行まで実行がCtrl+F8、Step実行がF8です。
コードが複雑になってきて、何度もStep実行が必要になる場合は、ブレークポイントをつけて検証します。
下記図の赤枠内をクリックするとその行でブレークポイントをつけることができます。実行すると、ブレークポイントのある行で実行が中断し、そこからstep実行ができるようになります。
ブレークポイントを外すときは、同じ場所をクリックします。
Sub test5()
'Stringは文字列型
Dim 文字列 As String
'変数名が「文字列」の変数に文字列"書いてみよう"を書き込む
文字列 = "書いてみよう"
'セルB2に変数「文字列」の中身を書き込む
Range("B2").Value = 文字列
End Sub
コードの解説
変数には、大きく分けて「数値を扱う型」「文字列を扱う型」「オブジェクト型」があります。整数を扱う変数の代表は、Long型です。小数の計算をするなら、Double型になります。
文字列を扱える型はString型、オブジェクトを扱う型は、多数あるため、ここでは割愛します。
文字列型の変数に数値を入れると、その数字は文字列として扱われます。(四則演算には使えません)