Excelの真骨頂はExcel VBAマクロ!
Excelは、表計算ソフトと言う通り、セルに数字を入れて自動計算をさせる達人のようなソフトです。その処理を助ける機能として、現場では関数やピボットがよく使われると思います。ある程度関数やピボットを覚えたら、次に進むのはやっぱりExcel VBA マクロです。マクロができると、データの集計やファイルの書き出しなど手動でやっていたことを自動化することが可能になります。簡単なものでも、良いものを作ればチームの生産性を上げることができます。これは一種のプログラミングなので全くの初心者にはハードルは高いと思いますが、やり方さえ思えてしまえば面白さがわかってきますよ。
具体的な操作の手順や、プロパティなどについて網羅性のある説明をされているサイトはもはや無限にあると言っても過言ではありません。この記事では、私の経験から初歩のうちにこれを知っておくと応用が効きやすいスクリプトをまとめました。とにかく難しく書かないように注意しました。この動作をさせたいとき、どう書くんだっけ?みたいな時に、パッと見てもらえればいいかなと思います。
今回は「ブック」と「シート」に関するものを集めました。便宜上、一部データ操作も含まれます。
言葉の意味について
簡単に書くように気を付けていますが、どうしても専門用語にしないと話が進まないようなものは、説明しておきます。
- ブック:Excelのファイルそのもののことです。
- シート:Excelのシートそのものです。初めからSheet1などの名前で用意されているものです。
- アクティブ:操作対象です。アクティブ化なら操作対象にすることを指します。
- 変数:データを入れておく入れ物です。処理に使うデータを特定の変数に入れると何度も再利用が可能になります。
Advertisement
スクリプト集
シート名指定せずにアクティブなシートのレンジを指定する |
アクティブシートの A1 をコピーします。 ActiveSheet.Range("A1").Copy |
シートのアクティブ化 |
Sheet2をアクティブにしてから文字列をセルにセットする記述です。 Worksheets("Sheet2").Activate Worksheets("Sheet2").Range("A1").Value="EXCEL VBA" |
複数シートの選択 |
シート名を指定して一括選択します。 Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Select インデックス番号でも指定できます。 Worksheets(Array(1 , 2 , 3)).Select |
ワークシート、レンジ選択 |
Worksheets("Sheet1").Range("A1").Select |
Activate、Selectを使わずにデータ操作 |
シートを開いて操作を要求しない、単にシート内のデータを活用したいだけなら、いちいちActivateやSelectを使わない方が処理速度が向上します。 <物理的なシート移動をする記述> Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A2").Select ActiveSheet.Paste <物理的なシート移動を省いた記述> Range("A1").Copy Sheets("Sheet2").Paste Range("A2") |
ワークシートのコピーとペースト |
Sheet1をコピーしてSheet3の後にペーストします。 Worksheets("Sheet1").Copy After:=Worksheets("Sheet3") |
アクティブシートをコピーしてあるシートの後にペーストする |
アクティブシートをコピーしてSheet2の後にペーストします。 ActiveSheet.copy After:=Worksheets("Sheet2") |
アクティブシートに「○○○○_今日の年月」で名前をつける |
アクティブシートの名前を「test_MMDD」に変更します。 ActiveSheet.Name = "test" & "_" & Month(Date) & Day(Date) |
シートの数を数えて変数にいれる |
変数【ShCnt】にシート数を格納します。 ShCnt = ThisWorkbook.Sheets.Count |
N番目のシートの名前を取得して変数にいれる |
変数【StName】に合致するシート名を変数【ShNam】に格納する。 ShNam = Sheets(StName).Name |
アクティブブックの名前を取得して変数にいれる |
アクティブなワークブックのファイル名を取得して変数【myfile】に格納する。 myfile = ActiveWorkbook.Name |
アクティブシートの名前を取得して変数に入れる |
アクティブシートの名前を取得して変数【ShNam】に格納する。 ShNam=ActiveSheet.Name |
メッセージボックスを表示する |
処理の途中に仕込んでメッセージ「処理ここまで」を表示させる。 msgbox "処理ここまで" |
行の高さ、列の幅を変更する |
Sheet2のA1セルのある行の高さを「20」にセットする。 Worksheets("Sheet2).Range("A1").RowHeight = 20 Sheet2のA1セルのある列の幅を「20」にセットする。 Worksheets("Sheet2).Range("A1").ColumnWidth = 20 |
アクティブなブックのクローズ |
ActiveWorkbook.Close |
ブックの内容に変更がある場合に上書き保存して閉じる |
ActiveWorkbook.Close savechanges:=True |
ブックの内容に変更があっても保存せずに閉じる |
ActiveWorkbook.Close savechanges:=False |
ブックの内容に変更がある場合に任意の名前を付けて保存する |
閉じる際にデフォルトで「backup.xls」として、名前をつけて保存のダイアログを表示させる。 ActiveWorkbook.Close SaveChanges:=True, _ FileName:="backup.xls" |
特定のブックを閉じる |
ワークブック「test」を閉じる。 Workbooks(test).Close |
ブックの最小化 |
Application.WindowState = xlMinimized |
シートの最小化 |
ActiveWindow.WindowState = xlMinimized |
Excel自体を非表示にする |
Application.Visible = False |
自ブックの削除 |
Kill myXlsFile |
確認メッセージなしでシート削除 |
いったんアラートを切り、削除してからアラートを復活させます。セーブ時のメッセージなど省きたいときにも使えます。 Application.DisplayAlerts = False Worksheets("Sheet2").Delete Application.DisplayAlerts = True |
アクティブなシートを保護する |
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True |
アクティブなシートの保護を解除する |
ActiveSheet.Unprotect |
ブックを閉じる際に自動的に上書き保存 |
Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Save End Sub |
別のブック内にワークシートをコピーする |
「Sheet1」をコピーし、Dummy.xlsの「Sheet2」の前にペーストされます。 Worksheets("Sheet1").Copy Before:=Workbooks("Dummy.xls").Sheets2 「Sheet1」をコピーし、Dummy.xlsの「Sheet2」の後にペーストされます。 Worksheets("Sheet1").Copy after:=Workbooks("Dummy.xls").Sheets2 |
まとめ
今回はブックとシート、データ操作に関するものを集めています。次回は別のテーマで記事を書いてみようと思います。
(文責:naka)
コメントを書く