2018年度も今日が最後ですが、今回はVBAの初歩の初歩を紹介します。
業務用に簡単なマクロを作ってみたい、となっても一から調べるのは面倒なので自分用のメモも兼ねています。
セルに何か書き込んだりするだけならマクロを記録する機能で十分ですが、
開発環境を作らずに、書けてすぐ動かしてみることができるのがVBAの魅力でもあると思うので。
###・Activate
指定したシートをアクティベート(選択)する。
Worksheets("シートA").Activate
Worksheetsというプロパティにシート名を渡し、「.Activate」でそのシートを選択することができる。
次に紹介するSelectメソッドと一緒に使うことが多い。
ActivateしないとSelectしても画面がそのシートに切り替わらない。
###・Select
指定したセルを選択する。
Cells("A1").Select
説明不要の一目瞭然さ。
ここではCellsでセルを指定していますが、「Range」でもセルを指定できる。
上の場合のような単一セルを選択したい場合はCellsで十分だが、複数セルや範囲で選択したいときはRangeが適している。
詳しくはこちらの記事をどうぞ ⇒ VBAの高速化(RangeとCellsの使い分け)
###・Format
日付型をフォーマットする。
today = Date
Format(today , "yyyy月mm月dd日(aaa)")
JavaでいうSimpleDateFormat。
第一引数にDate型変数を、第二引数にフォーマットしたい形式を指定する。
独断で選んだよく使いそうな設定は以下。
書式 | 説明 | 例 |
---|---|---|
yyyy | 西暦年の4桁の数値 | 2019 |
mm | 月(1桁の場合、先頭に0を付ける) | 03 |
dd | 日付1桁の場合、先頭に0を付ける | 31 |
aaa | 日本語表記の曜日(漢字1文字) | 日 |
aaaa | 日本語表記の曜日(〇曜日) | 日曜日 |
y | 1年のうちで何日目かを表す数値 | 90 |
w | 曜日を表す数値 | 1(土曜日は7) |
oooo | 日本語表記の月の名前 | 3月 |
ggg | 年号 | 平成 |
vbaは開発されてから20年近くアップデートされていない言語なので、明日発表の新元号は恐らく使えない。
WindowsアップデートでExcelのアプデも降ってくればなんとかなる?
###・Open
指定したファイルを開く。
Open ⇒ Print ⇒ Close の流れで説明する。
Open C:\sample.txt For Output As #1
JavaでいうFileReaderやFileWriter。
Openの
Forの次にそのファイルを開いて何をしたいかを記述する。
キーワード | モード | 処理 |
---|---|---|
Input | 入力モード | 読み込み |
Output | 出力モード | 書き込み |
Append | 追加モード | 書き込み |
Asにはファイル番号をつけるのだが、ファイルを閉じる(後述)場合に必要なので「#(数字)」を指定する。
###・Print
Openで開いているファイルに書き込みを行う。
Open C:\sample.txt For Output As #1
Print #1, Range("A1:E1")
#1でCドライブ直下にあるsample.txtを指定しているので、
このテキストファイルにRangeで範囲選択したセルに入っている文字が書き込まれる。
(追記して上書きではないので注意)
###・Close
Openで開いているファイルを閉じて処理を終了する。
Open C:\sample.txt For Output As #1
Print #1, Range("A1:E1")
Close #1
この場合はJavaでいうclose()。
初めのうちはピンとこなかったが、vbaに限らず、
ファイル操作を行う際はストリームに読み込んでいる状態を終了するのがプログラミングをする上で必須である。
上記のCloseはあくまでステートメントだが、
メソッドのCloseはExcel自体に使うことができる。
Workbooks("ブックC".xlsx).Close
もちろん、Workbooksプロパティで指定したブック(そのマクロが動いているブックでなくても可)を閉じる動きになる。
変数の型についてやIf、Forなどの他のステートメントはわかりやすいページがいくらでもありますので割愛させてください。
元号を取得する「ggg」、何かしらのアップデートが来ない限り「平成」が永遠に続くのではないでしょうか。。
ちなみにExcel(というよりOffice?)は、新しい関数や機能が追加されても、買い切りのものではWindowsアップデートで降ってくることはありません。
Office365なら常に最新の機能を使えるとのことです。
今年度は3回しか投稿できませんでしたが、
普段は業務中でもQiitaの先達にお世話になることが多いので、せめて自分と同じ新米エンジニアの助けになれば幸いです。