初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel(エクセル)マクロVBA入門-セルに表示・出力する

しゅっほです。今までプログラミングの基礎をVBAを題材に行ってきました。今までの基礎でオブジェクトや変数や制御構文なんかをマスターしていれば、ここから先はもう簡単です。どんどんやっていきます。

セルに値を出力する

出力するとか大それたこと言ってますが、手操作の場合にセルに何か入力しますよね?アレです。
今までの基礎を勉強してきた皆さんなら簡単ですよね?

  • オブジェクトを正しく指定して
  • 出力する値を代入(設定)する

これだけ。ほんとこれだけ。超簡単。では、コードです。Sheet1のセルA1に値を出力します。
VBE(Visual Basic Editor)を開いて、Sheet1をダブルクリックしてくださいね。VBEについては以前にここでやりました。

Public Sub OutputA1Cell()

    Sheet1.Cells(1, 1).Value = 出力する値

End Sub

いじょ。


・・・
もう少し、解説します?先ほど言った通りですね。Sheet1オブジェクトのCellsプロパティで1行1列目を指定して、そのValueプロパティに出力する値を設定するだけです。
この説明をしたときにオブジェクト?プロパティ?Cells?はぁ?とならないように、今まで散々説明してきました。やっぱりやっていることは、

  • オブジェクトを正しく指定して
  • 出力する値を代入(設定)する

だけ。

ちなみに、このコード、Sheet1オブジェクトをダブルクリックして表示された箇所に書いてます。これってどういうことかわかりますか?

Excelマクロはシートオブジェクトに直接VBAが書ける!

そう、このコードはShee1オブジェクトに直接書いているので・・・こう書いてもOKです。

Public Sub OutputA1Cell()

    ' Sheet1オブジェクトに直接書いているのでSheet1の指定を省略しちゃった。
    Cells(1, 1).Value = 出力する値

End Sub

マクロの自動記録するとどうなる?

あらためて、マクロの記録をちょっとやってみましょうか?マクロの記録開始を押して、A1セルに何か値を入れてマクロ記録を終了してから、VBEを開いてください。

f:id:drumer2sh:20130822113431p:plain

新しく「標準モジュール」というものができています。そしてその中に書かれているのは・・・はて?という感じですね。A1に値を出力するなら上のコードで十分のはずです。しかし、マクロの記録を行うと、このようになってしまう。これが私が「マクロを習得したいなら記録機能は使うな。」という理由です。
まず、「Range("A1").Select」ですが、これがSheet1オブジェクトに書かれているなら、問題ありませんが残念ながら標準モジュールに書かれています。標準モジュールはその名の通り標準ですので、どのオブジェクトにも属していません。つまり、ここにコードを書きたいならどのシートなのか?をはっきり指定しないといけないわけです。
このコードのままでは、Sheet2を選択した状態だとSheet2のA1セルを選択してしまいます。これが、マクロの記録だとうまく動いてくれなくなる原因ってわけですね。さらに「ActiveCell.FormulaR1C1 = "d"」ですが、これも最低です・・・ActiveCellですから「現在選択されているセル」という意味になるので、このコードだけを実行すると今選択されているセルに対して入力してしまいます。ちなみに「FormulaR1C1」FormulaR1C1プロパティでセルに数式を入力、または入力されている数式を取得するプロパティですが、個人的にはぶっちゃけあんまり使いません。理由は簡単で、意味合いが2つあるからです。「紛らわしいコードは書かない」これもプログラミングをする上で大切です。

マクロは基本標準モジュールに書く

標準モジュールになぜ書くのでしょうか?理由はいろいろありますが、一番は移植できるからです。これが一番大きいです。モジュールごと移設できるのでプログラムを再利用することも可能ですし、オブジェクトもある程度省略せずに書く必要があるので、コードとしても見やすくなります。(Sheetオブジェクトに書いても省略しない方がいいんですが…)
次回からは標準モジュールに書いて行くので、そのつもりで読んでくださいね。Sheetオブジェクトに書くのは卒業です。

次回は逆にセルの値を取得してみましょう!

かしこ