マクロを作ってアドイン登録

毎月のルーティン作業で一番嫌いなのが、ある拠点に提出するエクセルファイルの更新作業。複数あるのだけれど、いずれも不必要にセル(列)の結合がされている。エクセル方眼までいかないまでも、非常に迷惑。エクセル方眼はまだ申請用紙のフォーマットに合わせるため、とかなんとか言い訳を受け入れられるけれど(それでもできるだけやめてほしい)、私が毎月格闘するエクセルレポートは明らかに作成者が無計画にフォームを作った結果だろうな、と思われるもの。慌てず、あと5分くらい設計図を考えれば、こんなフォームで私の時間が奪われずに済んだだろうに。

私は後々の面倒臭さを回避したい人間なので、エクセルでフォーマットを作れ、と言われたら、時間がかかるタイプ。私が想像するに、私の大嫌いなフォーマットの作成者は、一つ一つの作業が速くて、一つ一つコピペして、行の高さを変更して、という作業が苦じゃないタイプなんだろうと思う。(もしくは、実際の作業を想像できないか。)

セルが結合されたら発生しちゃう面倒くさい作業

行の高さの自動調整が出来ない。

一時期、この行の高さを調整するタスクが大量に舞い込んできたので、調整用マクロを作ったのだけど、そうしたら、更に「調整しておいて」と言われることが増えたので、エクセルのアドインとして登録。この他にも、各シートの表示倍率を統一してA1セル選択した状態にするマクロ(【追記】下にサンプル付けました)とか、別ブックからのリンクがある場合にリンクを削除するマクロ(【追記】下にサンプル付けました)、シートインデックスを一番左に作るマクロをアドインとして登録している。

「わざわざアドインとして登録するまでもない」と思えるような作業でも頻繁に発生するのであれば登録しておいた方がいい。コーヒー休憩に行く時間くらいは作ってくれるはずだ。

マイクロソフトが高さの自動調整の改良をしてくれることを切に願います。(変な使い方を考える人は、私を含め、減ることはないと思う。)

おまけ

【各シートの表示倍率を統一してA1セル選択した状態にするマクロ】
[code language=”vb”]
Option Explicit
Sub ZoomLevelSetting()

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
[/code]

【別ブックからのリンクがある場合にリンクを削除するマクロ】
[code language=”vb”]
Option Explicit
Sub CheckExternalLink()

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
[/code]
アドインに登録する場合には、ThisWorkbookではなくActiveを使います。

Advertisements