こんにちは、システムエンジニアの福冨です。
エンジニア歴は当記事作成時点で8年、まだまだ若輩者ですが日々邁進しております。
また3歳の娘を育てている状況下でもあるので、そういった家庭事情と仕事の両立方法やノウハウ、マインドといったところもお伝えしていければと思っています。
今回はタイトルの通り、Excelで汎用的に使えるマクロの紹介をしていきます。
普段はエンジニア向けの記事を投稿していますが、今回の記事はエンジニアでなくてもExcelを触る方でしたら何かしら使える場面があるのではないかなと思います。
提出が必要なExcelで、以下のような作業をしたことはありませんか?
私はエンジニアなりたてのころ、上記を徹底するように上司から指導されました(笑)
どんなに内容を綺麗に仕上げても、これができていなければ再提出させられ、どうも納得いかなかったことを覚えています。
現場にもよるかもしれませんが、少なくとも上記のように体裁を整えて怒られることはありません。
かといって、場合によっては大量に存在するシートすべてに対してこんな作業をするのは非効率です。
なのでマクロを使ってワンボタンで終わらせてしまいましょう!
早速ですが、マクロの記述は以下となります。
Sub 全シートの体裁を整える()
‘シートを定義 ①
Dim ws As Worksheet
‘全てのシートで以下をループ ②
For Each ws In Worksheets
‘シートを選択
ws.Select
‘A1セルを選択 ③
ws.Range(“A1”).Select
‘拡大率を100%に固定 ④
ActiveWindow.Zoom = 100
Next
‘最初のシートへ移動 ⑤
Sheets(1).Select
End Sub
※コードブロックの設定方法が分からないため直書きになっています。ご容赦を。。。
上記マクロについて、各記述箇所を解説していきます。
①シートを定義
この後の処理として「全シートを対象にする」箇所があるため、各シートを指定するための入れ物として、
Worksheet型の変数を用意しています。
②全てのシートを対象にしてループ
For Eachは、特定の配列やWorkSheetsといった複数存在する項目を、1つずつ参照できる文です。
For Each ~ Nextまでの間に書かれている処理は、この複数項目すべてに対して実行することができます。
今回は対象のExcelブック内に存在するすべてのシートを指定しているため、全てのシートに対して何かしらの処理をする、という意味になります。
③A1セルを選択
記載そのままですが、全てのシートがA1セルを選択している状態にします。
④拡大率を100%に固定
こちらの記載そのままで、拡大率を100%としています。
③では「ws.」と参照していますが、拡大率の変更はシートを対象として実行できないため、
「ActiveWindow.」で指定しています。
もし100%以外の拡大率にする場合は、「100」の部分を任意の数値に変えます。
⑤最初のシートに移動
全ての処理が終わった段階では、②のループ処理の仕様で最後のシートを選択している状態になっています。
(ループは1つ目のシートから最後のシートまで順繰り参照しているため)
なので、最初のシートをまた選択し直すことで、Excelを開いたときに最初のページが表示されるようになります。
こうしてみると、手動で行っていた作業がそのまま文章化されただけですので、
そこまで理解が難しいものではないかなと思います。
これを機に、様々な反復作業をマクロ化して時間短縮できないか、検討してみるのも良いですね。