毎月のルーティン作業で一番嫌いなのが、ある拠点に提出するエクセルファイルの更新作業。複数あるのだけれど、いずれも不必要にセル(列)の結合がされている。エクセル方眼までいかないまでも、非常に迷惑。
エクセル方眼はまだ「申請用紙のフォーマットに合わせるため」とか何とかいう言い訳を受け入れられるけれど(それでもできるだけやめてほしい)、私が毎月格闘するエクセルレポートは明らかに作成者が無計画にフォームを作った結果だろうな、と思われるもの。慌てず、あと5分くらい設計図を考えれば、こんなフォームで私の時間が奪われずに済んだだろうに。
私は後々の面倒臭さを回避したい人間なので、エクセルでフォーマットを作れ、と言われたら、その業務のフローを調べてから作り始めるので、成果物を仕上げるまでに時間がかかるタイプ。私が想像するに、私の大嫌いなフォーマットの作成者は、一つ一つの作業が速くて、一つ一つコピペして、行の高さを変更して、という作業が苦じゃないタイプなんだろうと思う。(もしくは、実際の作業を想像できないか。)
Contents
アドイン化するとラクチン
エクセルの方眼紙をすすめる書籍やネットの情報がある一方で、私は反対のエクセル方眼紙反対の立場。私がエクセル方眼紙を毛嫌いする理由のひとつが、方眼紙化されたシートは、セルが結合されまくる、ということ。
セルが結合されたら発生してしまう面倒くさい作業がある。それは、行の高さの自動調整。ひとつ2つならいいか、と甘い顔をしていると方眼紙の増殖が止まらなくなって、悪夢が始まる。
方眼紙バスターとばかりに、行の高さ調整に足を突っ込むと更なる悪夢が始まる。
一時期、この行の高さを調整するタスクが大量に舞い込んできたので、調整用マクロを作ったのだけど、そうしたら、更に「調整しておいて」と言われることが増えたので、エクセルのアドインとして登録することにした。
アドインとして登録しておくと、いちいちマクロのファイル(bas拡張子のファイル)をインポートして、という作業がなくなるのでラクチン。特定のファイルでだけ使うマクロはアドイン化は不要だが、頻繁に行う作業があるのであれば、日常業務の効率化が図れるのでアドイン化を検討するといい。
私の場合は、この他にも、各シートの表示倍率を統一してA1セル選択した状態にするマクロ(【追記】下にサンプル追加)とか、別ブックからのリンクがある場合にリンクを削除するマクロ(【追記】下にサンプル追加)、シートインデックスを一番左のシートに作るマクロをアドインとして登録している。
アドインとして登録する方法
マクロが出来たら、下の情報を参考にアドイン登録をする。
「わざわざアドインとして登録するまでもない」と思えるような作業でも頻繁に発生するのであれば登録しておいた方がいい。コーヒー休憩に行く時間くらいは作ってくれるはずだ。
行の高さ調整という作業を自作マクロで何とかしたわけだが、ここまでエクセル方眼紙が作られている現状を見て、マイクロソフトが高さの自動調整の機能を改良をしてくれることを切に願う。やはり本来は標準機能で対応出来るというのが一番だ。
おまけ
アドインに登録する場合には、ThisWorkbook
ではなくActiveWorkbook
を使う。そうしないと機能しない。
【各シートの表示倍率を統一してA1セル選択した状態にするマクロ】
Sub FinaliseWorksheetsSetting() | |
'すべてのシートのアクティブセルをA1とし、標準表示・表示倍率を100%に設定する。 | |
'アドインとして登録しているため、ThisWorkbookではなくActiveWorkbookとしている。 | |
Dim i As Long | |
Dim ZoomLevel As Long | |
ZoomLevel = InputBox(Prompt:="シートの表示倍率を" & vbCrLf & "半角数字で指定してください。", Default:=100) | |
If StrPtr(ZoomLevel) = 0 Then Exit Sub | |
For i = 1 To ActiveWorkbook.Worksheets.Count | |
ActiveWorkbook.Worksheets(i).Activate | |
ActiveSheet.Range("A1").Select | |
ActiveWindow.ScrollColumn = 1 | |
ActiveWindow.ScrollRow = 1 | |
ActiveWindow.View = xlNormalView | |
ActiveWindow.Zoom = ZoomLevel | |
Next i | |
ActiveWorkbook.Worksheets(1).Activate | |
End Sub |
【別ブックからのリンクがある場合にリンクを削除するマクロ】
Sub RemoveExternalLink() | |
'他のエクセルファイルとのリンクがあるかを確認し、あれば、リンクの解除・非解除処理を行う。 | |
'アドインとして登録しているため、ThisWorkbookではなくActiveWorkbookとしている。 | |
Dim msg As VbMsgBoxResult '選択したメッセージの値 | |
Dim aryLink As Variant '外部リンクの格納 | |
Dim i As Long | |
aryLink = ActiveWorkbook.LinkSources(xlExcelLinks) | |
'他のブックへのリンクがあるかを確認し、リンクを削除するか選択する。 | |
If IsArray(aryLink) Then | |
msg = MsgBox("他のブックへのリンクがあります! " & vbCrLf & "リンクを解除しますか?", vbYesNo + vbQuestion) | |
If msg = vbYes Then | |
'リンクを削除する | |
For i = 1 To UBound(aryLink) | |
ActiveWorkbook.BreakLink _ | |
Name:=aryLink(i), _ | |
Type:=xlLinkTypeExcelLinks | |
Next i | |
Else | |
MsgBox "リンクを解除していません。" | |
End If | |
Else | |
MsgBox "他のブックへのリンクはありませんでした。" | |
Exit Sub | |
End If | |
MsgBox "DONE" | |
End Sub |