使った時間を調査する「時間家計簿」の作成

#ご挨拶
こんにちは。たいちゃんです。
2回目の投稿になります。
今回はさらにマニアックというか、かなり特殊なソフトウェアの使い方
―LibreOffceとマクロ―を書いてみたいと思います。
では頑張ります。

#今年もあと僅かになりましたが・・・
もう12月も中旬に入ってしまいました。来年のことを言うと鬼が笑うという時期でも
無くなっていると思います。
さて、唐突ですが皆さんは時間をどのように管理されているでしょうか。
「スマフォで」とか「スケジュール帳で」とか言う方も多いかと思います。
私もこのどちらも大雑把とは言え使っていますが、これから私が書いていきたいのは
「使ってしまった時間をどのように調査・管理するか」ということです。現在私は以下のような
図を作り、LibreOffceの表計算ソフトCalcを用いて調査しております。

![時間家計簿1.png](https://qiita-image-store.s3.amazonaws.com/0/319826/111ef88a-bad6-de9d-6e0d-4fc8bd38ae5c.png)
######図1.私の使用した時間の調査例
縦の行に日付、横にその日に行ったことを午前0時から15分刻みで計96列記載していきます。
記載する内容は私の場合以下の内容になっております。

![時間家計簿2.png](https://qiita-image-store.s3.amazonaws.com/0/319826/207c9318-110a-de39-3edd-46a4616d860b.png)
######図2.使用時間の分類項目
例えば世界史の本を1時間読んだときは最初のセルに歴史学と書いて横に合計4つのセルを結合させ、
分野で示されている色「黄色」で塗り潰します。前回のFreeCADで3DCADデータを作ったときは機械工学と
書いて掛かった時間分、例えば3時間なら12個のセルを結合し、分野で示されている「スカイブルー」で
塗り潰します。

#そもそもなんでこんなものを作ったのか・・・
もう数年前のことになりますが、『10000時間の法則』というのにハマった時期があります。
一時はスマフォで延々とこの法則について、ネット上の記事をあれこれと読みふけったものでした。
簡単に言うと一流の技術を得るには『10000時間』の練習・訓練が必要だというようなことを
ある人が報じたのです。でもこの人が報じた元になった研究を行った研究者は
「10000時間というのは曲解で、時間数だけでなくその練習の質も大事だ」と後に述べたそうです。
只、その研究者はこうも言っていたそうです。「一つ報じた人が正しかったことは才能がある人でも、
相応の練習をしないとその才能は開花しないと言うことです。」と。以上私なりの解釈で事の顛末の
あらすじを書いてみましたが、ここから言えることは練習・訓練は大事だと言うことではないでしょうか。
勿論この研究者の方も述べているように質も大事です。只、その質のよい練習・訓練も時間が少しでも
あればこそ可能なのではないでしょうか。

当時、私も三十路中盤に差し掛かり、自分の人生何だったんだろうと言う事が「ふと」頭をよぎることが
ありました。
「大学出て就職して失業して職業訓練校行ってなんとか再就職出来たけどご自慢の特技なんて
特にないな〜。」と。
只、割と学ぶ意欲はありました。資格をとったり、社会人学生で学校に行ったりしていました。
でも、学んだら学びっぱなし、ほとんどの事が板についていないのです。現在は電気電子の学科を
出たにもかかわらず、ラジオも組めません。

そこで時間をかけて学んでいこうということになりました。期間はひとまず2017年1月1日から始めて
60歳になる年の2041年12月31日迄。24年間です。そしてこの時間を調査するのに活用しているのが
この図、名付けて「時間家計簿」です。

#作り方
###1)日付と入力部
それでは来年と再来年の作り方を書いていきたいと思います。
まず、図1に出てきましたように行に年月日をそれぞれ書いていくことになります。
来年2019年は365日、その次の2020年はうるう年で366日です。そこで、まずA3〜A367のセルを結合して
2019年とします。次のA368〜A733のセルも結合し、2020年とします。その後、B3〜B33を結合して1月と・・・
その年の月のセルを作っていきます。最後にC1〜C733迄日付を入れて縦の行は完成です。
日付は「セルの書式設定」を「日付」のどれかにすれば、2019/1/1を入れた後はオートフィルで簡単に
作れるかと思います。

列を作る前にD3のセルを選択します。ツールバーより「表示」ー「セルの固定」ー「行と列の固定」を
有効にします。これで何年何月何日の何時頃に当たるセルを選択しているのか分かり易くなります。

列はD1〜G1の4つを0時として以下順番に4つ1組でセルを結合していきます。23時迄終わったら、
今度はD1にQ1と記載して23時の最後のセルである96番目のセルまでオートフィルで埋めていきます。
このQは1/4を表すQuaterの頭文字から取ったもので、私はこの15分単位の期間を「クォータ」と呼んでいます。

次にマクロでの集計結果を表示する部分を作ります。

###2)マクロの集計結果表示部
![時間家計簿3.png](https://qiita-image-store.s3.amazonaws.com/0/319826/6a76f59a-83ca-ce32-aa5d-23e453108188.png)

#####図3.マクロの集計結果表示部
上図で「2」の行の1〜42の色分けされた部分は図2の使用時間の分類項目のそれぞれの番号に当たります。
EL2のセルのcheck96と記入されたセルから下は、それぞれの行のCV〜EKのセルをSUMで合計して96又は
未入力状態の0以外ならば「赤1」の色で塗りつぶされるように「書式」ー「条件付き書式」で設定しています。
「734」の行はそれぞれの分類項目の列の数値の合計値を表示します。ここでの注意としては例えばうるう年を
含まない2021年から2022年のシートを作るときですが、後のマクロをどのシートでも汎用的に
運用させるとなると「733」の行は空白になってしまいますが、全てのシートでここの列を揃えた方が
良いかと思います。また、私のマクロがまだ未熟なのかもしれませんが、一度に3年分、4年分と
マクロを実行すると時間が結構掛かりますので、2年分ぐらいでやめておいた方が良いかと思います。
最後にEM〜EOの列ですがこれは「734」の列で出てきた数値を大まかな分類で合計したものです。
赤いセルの語学は分類項目の1〜8、青いセルの科学技術は分類項目の22〜31、黄緑の社会・文化は
それ以外の項目となります。この大まかな分類の数値を1/4したものがその分類での学習に
取り組んだ時間となります。

###3)マクロの作成
作成したマクロは以下のようになっております。

```LibreOffice&nbsp;Basic:total
REM  *****  BASIC  *****

Sub Main
	dim Majer(41)  as integer
	dim i ,j as integer
	dim x as integer
	dim y as integer
	
	dim nowsheet as object
	dim nowcell as object
	dim writecell as object
	
	nowsheet=thiscomponent.currentcontroller.activesheet

	'専攻の区分ごとのクォーター数を数える
	for y=2 to 732
		j=-1
		for x=3 to 98
		nowcell=nowsheet.getcellbyposition(x,y)
			select case nowcell.string
				case "国語"
					Majer(0)=Majer(0)+1
					j=0
				case "英語"
					Majer(1)=Majer(1)+1
					j=1
				case "独語"
					Majer(2)=Majer(2)+1
					j=2
				case "仏語"
					Majer(3)=Majer(3)+1
					j=3
				case "中国語"
					Majer(4)=Majer(4)+1
					j=4
				case "ロシア語"
					Majer(5)=Majer(5)+1
					j=5
				case "スペイン語"
					Majer(6)=Majer(6)+1
					j=6
				case "その他の言語"
					Majer(7)=Majer(7)+1
					j=7
				case "歴史学"
					Majer(8)=Majer(8)+1
					j=8
				case "哲学"
					Majer(9)=Majer(9)+1
					j=9
				case "宗教学"
					Majer(10)=Majer(10)+1
					j=10
				case "地理学"
					Majer(11)=Majer(11)+1
					j=11
				case "教育学"
					Majer(12)=Majer(12)+1
					j=12
				case "教養"
					Majer(13)=Majer(13)+1
					j=13
				case "社会学"
					Majer(14)=Majer(14)+1
					j=14
				case "心理学"
					Majer(15)=Majer(15)+1
					j=15
				case "法学"
					Majer(16)=Majer(16)+1
					j=16
				case "政治学"
					Majer(17)=Majer(17)+1
					j=17
				case "経済学"
					Majer(18)=Majer(18)+1
					j=18
				case "商学"
					Majer(19)=Majer(19)+1
					j=19
				case "経営学"
					Majer(20)=Majer(20)+1
					j=20
				case "数学"
					Majer(21)=Majer(21)+1
					j=21
				case "物理・地学"
					Majer(22)=Majer(22)+1
					j=22
				case "化学"
					Majer(23)=Majer(23)+1
					j=23
				case "生物学"
					Majer(24)=Majer(24)+1
					j=24
				case "医療・福祉"
					Majer(25)=Majer(25)+1
					j=25
				case "機械工学"
					Majer(26)=Majer(26)+1
					j=26
				case "電気電子工学"
					Majer(27)=Majer(27)+1
					j=27
				case "情報工学"
					Majer(28)=Majer(28)+1
					j=28
				case "工芸"
					Majer(29)=Majer(29)+1
					j=29
				case "農学"
					Majer(30)=Majer(30)+1
					j=30
				case "家政学"
					Majer(31)=Majer(31)+1
					j=31
				case "音楽"
					Majer(32)=Majer(32)+1
					j=32
				case "体育学"
					Majer(33)=Majer(33)+1
					j=33
				case "睡眠"
					Majer(34)=Majer(34)+1
					j=34
				case "手洗い"
					Majer(35)=Majer(35)+1
					j=35
				case "衛生"
					Majer(36)=Majer(36)+1
					j=36
				case "交友"
					Majer(37)=Majer(37)+1
					j=37
				case "業務"
					Majer(38)=Majer(38)+1
					j=38
				case "休息"
					Majer(39)=Majer(39)+1
					j=39
				case "買い物"
					Majer(40)=Majer(40)+1
					j=40
				case "その他"
					Majer(41)=Majer(41)+1
					j=41
				case ""
					if j>=0 and j<=41 then
						Majer(j)=Majer(j)+1
					end if
				case else
					for i=0 to 41
						Majer(i)=0
					next i
					x=-1
					exit for
			end select
		next x

		if x=-1 then
			exit for
		end if
					
		'数えた専攻の区分ごとのクォーター数を表示する		
		for i=0 to 41
			j=i+99
			writecell=nowsheet.getcellbyposition(j,y)
			writecell.value=Majer(i)
			Majer(i)=0
		next i
		
	next y
		
	
End Sub
```

後はLibreOffice Basicにこれを貼り付けて費やした時間の通りにセルを記入し、時間を知りたくなったら
このマクロを実行するだけです。このマクロはcase文で指定されていない文字列―例えば-(ハイフン)等―が
どこかのセルに入力されているとそのハイフンが入力された日は計算を無効にし、それ以降の日は
打ち切ります。途中で計算結果を知りたくなった時に、毎回2年分の計算をしなくて済むようにする為です。
#最後に
以上で時間家計簿のお話は終わりです。この家計簿は続ける事が大事だと思うので、多少不正確でも
良しとしています。大まかに自分がどのように時間を費やしているかが分かることが重要だと思っている
からです。これから先は私生活でもものづくりを楽しみたいと思っているので、プログラムの練習をしたり、
CADや3Dプリンターで造形作業をしたり、それを助けるような数学の問題を解いたりといったことに
掛かった時間を調査するのに活用していきたいなと思っています。

#参考資料
Other Instraction - Apache OpenOffice wiki
URL:https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Language
OpenOfficeのマクロのwikiです。当時LibreOfficeのみでは私の力量では充分な情報を得られなかったので、
フォーク元のOpenOfficeのwikiを見てこのマクロを完成させました。
関係者の方有難うございました。