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

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

初心者のためのExcel(エクセル)マクロVBA入門-セルの書式設定を変更する

今回もプログラミングの基礎が理解できていればなんとなく想像はつくのではないかな?と思います。

「セルの書式を変更する」=「セルのプロパティを設定する」

なんて感じじゃないのかな?ということが。しかし一言で書式と言っても沢山あります。
例えば、「右寄せにしてフォントはMSゴシックで、背景色を黄色にして、太字にして、そんでもって日付形式で何年何月何日にしたい!」
これだけでもかなりの設定をしなければいけません。

さて、じゃあとりあえず書いてみましょうか?それぞれの書式のプロパティは1個ずつGoogle先生に聞いてみます。
ではセルA1に本日日付を上の書式になるようにプログラミングしてみましょう。

右寄せはHorizontalAlignmentプロパティ


だそうです。設定値はそれぞれ・・・

  • 標準  :xlGeneral
  • 左揃え* :xlLeft
  • 中央揃え:xlCenter
  • 右揃え* :xlRight
  • 選択範囲内で中央:xlCenterAcrossSelection
  • 均等割り付け*  :xlDistributed

右寄せはxlRightという値を指定します。これは定数と言われるものであらかじめExcelVBAが用意してくれている定数です。このxlRightには実際には0とか1とか2などの「定数」が定義されています。理由は簡単で、定義している方が分かりやすいからです。定義してないと具体的に2とか3とか定数を直接設定することになりますが、これだとExcelは理解できますが、人間は一目で理解できません。右なのか?左なのか?センターなのか?はたまた標準なのか?こういう弊害をなくすためにあらかじめさまざまな定数が定義されています。
では、いつも通り標準モジュールに記載しますので・・・

Sheet1.Range("A1").HorizontalAlignment = xlRight

ですね。ちなみにこのxlRightとか覚えなくてもVBEの補完機能を使えば、自動で出てくるので大丈夫です。便利ですね。

フォントの設定はFontオブジェクトのNameプロパティ


だそうです。設定する値は文字列でフォントの名前を指定します。ですので・・・

Sheet1.Range("A1").Font.Name = "MS ゴシック"

ですね。結構簡単です。いつもやる日本語で翻訳すると・・・
「Sheet1のセルA1のフォントの名前を(MS ゴシック)に設定しなさい」
となりますね。

セルの背景色はInterior.ColorIndexプロパティ


だそうです。このInterior.ColorIndexは色の番号を指定します。ざっくりと色の表は
こんな感じ。

f:id:drumer2sh:20130828161737p:plain

そして、命令文は

Sheet1.Range("A1").Interior.ColorIndex = 6

ですね。さらにもう少し微妙な色の設定をしたい!という人はInterior.Colorプロパティを利用します。
こちらはRGB値を設定することで、より詳細な設定が可能です。RGBとはRedとGreenとBlueの頭文字で、この3色の割合を混ぜ合わせてあらゆる色を作ります。設定する順番もR、G、Bの順です。

A1セルの背景色を濃い青に設定します。

Sheet1.Range("A1").Interior.Color = RGB(0, 0, 128)


太字はFontオブジェクトのBoldプロパティ


先ほどのフォントの設定と同じオブジェクトにあるBoldプロパティを設定します。設定するのは「太字か?太字じゃないか?」しかないので、TrueまたはFalseを設定します。
Trueなら太字、Falseなら太字じゃない。ですね。

Sheet1.Range("A1").Font.Bold = True


表示形式はNumberFormatLocalプロパティ


だそうです。表示形式の方法は本当にたくさんあるので、気になる人はまたVBA NumberFormatLocal 表示形式 一覧とかで検索すればいいと思う。
さて、何年何月何日の表示形式は「yyyy年mm月dd日」ですので

Sheet1.Range("A1").NumberFormatLocal = "yyyy年mm月dd日"

となります。はぁ・・・これで全部。さて、これをまとめて記述しますと・・・

Sheet1.Range("A1").HorizontalAlignment = xlRight
Sheet1.Range("A1").Font.Name = "MS ゴシック"
Sheet1.Range("A1").Interior.ColorIndex = 6
Sheet1.Range("A1").Font.Bold = True
Sheet1.Range("A1").NumberFormatLocal = "yyyy年mm月dd日"

よくみると、最初のSheet1.Range("A1")を毎回記述しているのでちょっとねぇ・・・となるのがプログラミングなんですよ。「同じコードはできるだけ書かない」というのは鉄則です。
まとめて設定するために、VBAにはとても便利なステートメントがあります。

まとめてプロパティを設定するならWithステートメント!


Withステートメントを使うと上のコードをすっきりできます。

With Sheet1.Range("A1")
	.HorizontalAlignment = xlRight
	.Font.Name = "MS ゴシック"
	.Interior.ColorIndex = 6
	.Font.Bold = True
	.NumberFormatLocal = "yyyy年mm月dd日"
End With

どうでしょう?すっきりしましたね。このようにWithの後にオブジェクトを指定するとそれ以降を.プロパティでそのオブジェクトに対する設定が可能です。

セルの書式設定は覚えなくていい!


良く使うものは勝手に覚えるので良いですが、無理に覚えなくても大抵WEBにあるので、さらっと検索すればいいだけです。
本当にたくさんあるので、都度都度検索して、使ってしまいましょう!


次回は、セルのコピーと貼り付けです!!色々と落とし穴ありまくり!