やっぱり0から始めるのは便利
今日職場で、次のようなマクロについて意見交換することがあった。
このようなテーブルに、開始日から終了日までの日付を追加するときのお話。
例えば今日(12/8)から明後日(12/10)までの三日間、つまり三行をテーブルに追加したい。このとき、ループを0始まりにするか1始まりにするかで、書き方が変わってくる。
1始まりの場合。1、2、3と日頃数えるので、直感的に理解し易い。
Sub test() Dim i As Long Dim 開始日 As Date 開始日 = #12/8/2020# Dim 終了日 As Date 終了日 = #12/10/2020# For i = 1 To 終了日 - 開始日 + 1 With ActiveSheet.ListObjects(1).ListRows.Add .Range(1) = 開始日 + i - 1 End With Next End Sub
個人的には以下の二か所が、慣れないと少し難しいかも?と思う。
- 終了日 - 開始日 + 1 (12/10と12/8の差は二日間。12/8を含めるので+1)
- 開始日 + i - 1 (開始日+i だと、翌日から始まってしまう。なので-1)
一方で0始まりの場合。
0番目という考え方は日常に無いため、直感的に理解しにくい。
Sub test() Dim i As Long Dim 開始日 As Date 開始日 = #12/8/2020# Dim 終了日 As Date 終了日 = #12/10/2020# For i = 0 To 終了日 - 開始日 With ActiveSheet.ListObjects(1).ListRows.Add .Range(1) = 開始日 + i End With Next End Sub
直感的な理解からは遠ざかったものの、先程の二か所は1を足したり引いたりが無くなって、とてもスッキリしている。
- 終了日 - 開始日
- 開始日 + i
0始まりか1始まりかでこのように差が出るのは、本業がブログらミンクではない身としては、非常に面白いと思う。
それでもやっぱり、ここだけの話、時々混乱してます。
参考まで。