現場で差をつける!Excel VBA マクロ 基本TIPS ~ブック&シート編~

現場で差をつける!Excel VBA マクロ 基本TIPS ~ブック&シート編~

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を使わない方が処理速度が向上します。
Sheet1のA1セルのデータをコピーしてSheet2のA2セルにペーストします。

<物理的なシート移動をする記述>

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)

プログラミングカテゴリの最新記事