日報データを整形する
背景
サイボウズから書き出した日報を、
見やすいように担当者ごとにシートをわけて、整形したい。
月初に前月分まとめなくちゃいけない。
(1月のはじめに、12月分をつくる)
かんたんなイメージをつけると・・・
書いたもの
Option Explicit
'-----仕様-----------------------------------------
'サイボウズの日報アプリより書き出したCSVファイルを、
'各月、各担当者ごとにまとめなおして保存する。
'--------------------------------------------------
'-----サイボウズのデータから、作成する月、担当者をソートする。データを新しいシートにコピーして整形する。
'-----サイボウズデータのファイルをひらいてこのマクロを実行するようにする
Sub MakeReport()
'---画面が動かないよう固定
Application.ScreenUpdating = False
'---ポップアップで作成する月を取得
Dim ReportMonth As String '作成する月
ReportMonth = InputBox("何月の報告書をまとめますか?", "入力してください")
'---作成する年を取得。12月を作成する場合は、(現在の年-1)が作成する年
Dim ReportYear As String '作成する年
If ReportMonth = 12 Then
ReportYear = Year(Date) - 1
Else
ReportYear = Year(Date)
End If
'---作成する担当者ごとに繰り返し処理するため、配列に格納。
Dim ReportPerson(0 To 2) As String
ReportPerson(0) = "Aさん"
ReportPerson(1) = "Bさん"
ReportPerson(2) = "Cさん"
Dim report As Variant 'Eachステートメントの変数はVariantのみ
For Each report In ReportPerson
'---担当者名のシートを作成
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = CStr(report) 'Variant型をString型に変換しながら
'---A列から担当者をソート
Sheets(1).Select
Range("A1").AutoFilter field:=1, Criteria1:=CStr(report)
'---B列から月をソート
Dim SortMonth As String
SortMonth = ReportYear & "/" & ReportMonth & "/" & "1"
Range("B1").AutoFilter field:=2, Operator:=xlFilterValues, Criteria2:=Array(1, SortMonth)
'---該当箇所を担当者名のシートにコピー
Range("A1").CurrentRegion.Copy Sheets(CStr(report)).Range("A1")
'---オートフィルタの設定を解除
Range("A1").AutoFilter
Sheets(CStr(report)).Select
'---印刷の向きを横にする
ActiveSheet.PageSetup.Orientation = xlLandscape
'---Aを削除(シート名が担当者名になっているので削除してOK)
Columns("A:A").Delete
'---表示する日付形式を変える
Columns("A:A").NumberFormatLocal = "m""月""d""日"";@"
'---A〜Bのサイズを変える
Columns("A:B").ColumnWidth = 9
'---C〜Fのサイズを変える
Columns("C:F").ColumnWidth = 14
'---C〜Gを「折り返して全体を表示する」
Columns("C:G").WrapText = True
'---Gのサイズを変えて、「折り返して全体を表示する」
Columns("G:G").ColumnWidth = 55
'---高さを自動調整
Rows.AutoFit
Next report
'---画面固定を解除
Application.ScreenUpdating = True
End Sub
書いてみて
エラー処理ってどうやって検討して書けばいいのかしら?
配列ちゃんとかけてよかった!
ループの要素変数はVariant型しかだめなので、
それをString型に変換しながら利用しなくちゃいけないところが気づけてよかった。
来年からまたおばあちゃんの仕事がひとつ減る。

