VBAで、ワークシートに処理結果をたくさん出力するプログラムを作っているとする。
現在表示されている領域の外にデータが出力された場合、普通はプログラムが終了するまで待って、手動でワークシートをスクロールしなければならない。これでは面倒だから、ちゃんとリアルタイムで追いかけて確認したい。つまり、表示領域外にデータを出力した場合には、自動的にワークシートがスクロールし、最新のデータに追従して欲しい。
こうした動作は、VisibleRange
, ScrollRow
, ScrollColumn
等を使って実現できる。
サンプルコード
' Sleepを使うためのおまじない Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '------------------------------------------------------------ ' 指定されたセルに文字列を出力。 ' 表示範囲外のセルに出力した場合は、スクロールさせる。 '------------------------------------------------------------ Sub printAndScroll(row, col, str) Cells(row, col) = str '出力 'シートのスクロール With ActiveWindow '行方向にスクロール(マイナス2で微調整している) If row > (.VisibleRange.Rows(1).row + .VisibleRange.Rows.Count - 2) Then .ScrollRow = .ScrollRow + 1 End If '列方向にスクロール(マイナス2で微調整している) If col > (.VisibleRange.Columns.Columns(1).Column + .VisibleRange.Columns.Count - 2) Then .ScrollColumn = .ScrollColumn + 1 End If End With End Sub '------------------------------------------------------------ ' サンプルmain '------------------------------------------------------------ Sub main() '右下に向かってテキトーな文字を出力 For i = 1 To 50 Call printAndScroll(i, i, "(" & i & ", " & i & ")") Sleep 100 '動作確認のためスリープ Next End Sub