ループ回数を調べる構文のあれこれ
「○○毎のシート(共通フォーマット)」が複数あった場合に、
そこからいわゆる串刺し(3D集計)や、統合機能とか、
そのような使い辛い(?!)Excelの既存機能を使うのとは違って、
自分でマクロを組んでおくと色々な拡張が容易にできるという大きな利点があります。
たとえば、
28日だったり31日だったりで、合計行が可変となる(不特定なデータ数の)
シートで、何行目かはその都度変わる(分からない)が、合計値は一番下
にあるという場合なら、いつも使っている定番構文の
n = Cells(Rows.Count, "D").End(xlUp).Row
を使ってプログラムのループ内を
For i = 1 To Sheets.Count - 1
Sheets(i).Select
n = Cells(Rows.Count, "D").End(xlUp).Row
Range("D" & n).Select
a = ActiveCell.Value
・
・
・
といった具合にも簡単に出来るわけですし、
また、シート名を取り込んだ後に以下のようなIF文を使って、
s = ActiveSheet.Name
If s Like "*2016年*" Then
・
・
・
といった具合に、沢山あるシートの中から特定のシート名を(上記の例では
今年のシートだけを)一覧シートに出すということも容易に出来ます。
更には、ファイル操作の「マクロの記録」をやってみさえすれば、シート
間の集計に限らず、ブック間での応用というのも容易に出せるというわけ
です。
ループを回す際の回数を調べる構文としては、先の
Sheets.Count 'シート数
以外にも、たとえば
Workbooks.Count 'ブック数
Cells(Rows.Count, "B").End(xlUp).Row '行数
Cells(1, Columns.Count).End(xlToLeft).Column '列数
Range("A1", "C3").Count 'セル数
Len(Range("C3").Value) '文字数
等々ありますので、用途にあわせてご活用ください。
このようにマクロでやればいくらでもそうした応用拡張が
利くわけですから、ましてや、使い難い機能や多数の関数をセルに沢山
組み込んでしまって、ちょっと表いじったら「シート壊れたー」なんて・・・、
少々マクロができる人は、応用も利き、壊れる心配もないやり方というのを
してくださいね。