VBA日報

タグ: VBA

 商品の販売実績をエクセルファイルにつけており、その月集計、日別一覧シートを過去3年分印刷しといてくれ、という指示を受けた。自分でせんかい!

 一覧のシートは31日の列がすべてエラー値になっているので手直しが必要で、印刷すると右端の枠線だけA4一枚に収まらず二枚目に線だけ印刷されているため一枚目だけ印刷するか、印刷範囲の調整も必要。

また月の商品合計では

=SUM(1日!B5 + 2日!B5 + 3日!B5 + ... + 31日!B5)

と恐ろしい仕様になっていたので

=SUM('1日:31日'!B5)

のように変更。これはずいぶん前にやっておいた。というか一覧できるシートがあるのに31つのシートがあってそれぞれに打ち込んでるの全く意味不明なんだよね?

一覧のシートは印刷して眺めようとすること自体がアホ。データの使い方を理解せよ31日の列が

=31日!B5
=31日!C5
=31日!D5
=31日!B6
=31日!C6
....
=31日!B23

てな感じで列の中でまず参照するセルの列が3つ変わり、終わったら行が1つ増える仕様を繰り返し、そのパソコンのオートフィルでは上手く反映できない。フラッシュフィルや最新のスピル機能ならできるのかもしれない。メロスにはエクセルがわからぬ。会社で与えられたパソコンは課の人間(4人)で共用、ウイルスが怖いからという理由でスタンドアロンであった。一方自称パソコンチョットデキル定年退職後雇用おじさんには15万円のノートが与えられているのだった。文字打つとき毎回キーボード眺めてから打つキー選ぶのやめてもらっていいですか?

 やることとしては

  • 日計シートの31日列の修正
  • 印刷範囲の枠が1枚目に含まれるよう修正
  • 印刷

でありこれが3年分*12ヶ月ファイルあるので自動化したほうが早い。印刷機がデフォルトでモノクロコピーしかできない設定なので逐一印刷設定の変更をしているだけでは1日かかりの仕事になっていたと思われる。コピペするのにマウスの右クリック2回使ってる職場なので。適当に書き上げたものは以下。

sub 集計直して印刷するやつ()
Application.ScreenUpdating = False
Sheets("合計").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
Sheets("日計").Select
Columns("AH:AH").ColumnWidth = 0.67
Dim i As Long
Dim x As Long
x = 5
For i = 4 To 58 Step 3
Cells(i, 32) = "='31日'!B" & x
Cells(i + 1, 32) = "='31日'!C" & x
Cells(i + 2, 32) = "='31日'!D" & x
x = x + 1
Next i
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        ActiveWorkbook.Save
        ActiveWorkbook.Close
End Sub

 プリンタのデフォルト印刷をカラーに変更し、これを実行。あわよくばファイルを開く、順番に印刷するまでしたかったがファイルを開く関係の知識があやふやなので調べる時間よりここはもう順番に手動でブックを選んだほうが早いなと思った。年度なので4→12,1→3月で印刷しないといけなかったので。全部印刷したところで、プリンタをモノクロ印刷に戻して終了。  より洗練(一般化)させるならAH列も決め打つのではなく右側の罫線を取得したり、繰り返し処理も数値ではなく表の最後を取得したりとか、知識を増やそうとするなら幅をどうこうするんじゃなく印刷範囲や印刷周りに手を加えるほうがスムーズだった気がする。月合計を一覧するシートは前年度同月を引っ張るようになっているが、いまのところそれが手動なので、自動化したいところ(ファイル名が一年分若いだけなのでファイルの読み込みさえわかればできそう)。

エンプロイアビリティを自己研鑽すること自体が変な話だと思っているが、MOS取っとこうかなあという気持ちが浮いたり沈んだりしている。

呟いたのか、俺以外のヤツと…