凍結された行の浮動情報(Microsoft Excel)
Bevには、フリーズされた2つのヘッダー行とフリーズされた列を持つワークシートがあります。その後、ページをスクロールして、週ごとにデータを追加できます。名前と小計は左側に固定されており、週の日付は上部にあります。とりわけ、最初の凍結された行で、Bevはワークブックを説明する素敵な豪華なタイトルを持っています。彼女は、自分のタイトル(最初の行のタイトル)を「フロート」させて、ページをスクロールしたときに、表示されているワークシートの端からタイトルが消えないようにする方法を探しています。
これを行う最も簡単な方法は、タイトルがセルA1にあることを確認することです。
1つの列と2つの行がフリーズしているため、右にスクロールすると、タイトルを含むセルA1が常に画面に表示されます。
タイトルにもう少し凝ったものが必要な場合は、テキストボックスとマクロを少し操作する必要があります。最初の行にあるテキストボックスにタイトルを配置すると、いくつかのマクロを使用して、テキストボックスが常にその行の画面の中央に配置されるようにすることができます。
この例では、タイトルを含むテキストボックスの名前が「TitleTextBox」であると仮定します。ワークシートを左右にスクロールすると、マクロが自動的にチェックして、テキストボックスの左端が常に表示されている画面領域の左端と等しいことを確認できます。テキストボックスを含むワークシートのワークシートコードに次のコードを追加する必要があります:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Me.Shapes("TitleTextBox").Left = ActiveWindow.VisibleRange.Left End Sub
このマクロはワークシートコードの一部であるため、ワークシートで選択が変更されるたびに実行されます。したがって、矢印キーを使用して左または右に移動したり、Tabキーを使用したり、マウスでセルを選択したりすると、マクロが実行され、テキストボックスの左端と表示領域が常に一致するようになります。
このマクロが機能しないのは、画面下部の水平スクロールバーを使用して左右にスクロールしたときです。スクロールバーの使用時に自動的にトリガーされる「スクロールイベント」はありません。新しい表示範囲内のどこかで選択が行われ、それによってSelectionChangeイベントがトリガーされるまで、テキストボックスの場所は移動されません。
この制限の唯一の回避策は、VisualBasicのタイマー機能を使用してテキストボックスを定期的に更新することです。次のコードは毎秒実行しますが、必要に応じて、実行頻度を減らすように調整できます。
このコードは通常のVBAモジュールに追加されます:
Sub UpdateTB() If ActiveSheet.Name = "Sheet1" Then ActiveSheet.Shapes("TitleTextBox").Left = _ ActiveWindow.VisibleRange.Left End If Application.OnTime Now + TimeSerial(0, 0, 1), "UpdateTB" End Sub
そして、これはワークブックオブジェクトに追加され、ワークブックが最初に開かれたときにタイマーを開始します。
Private Sub Workbook_Open() UpdateTB End Sub
テキストボックスの配置にタイマーベースのアプローチを使用する場合、SelectionChangeイベントに関連付けられているアプローチを使用する必要はありません。タイマーバージョンは、間隔ごとにタイトルを調整するだけです。
コードの実行によって生じる遅延に加えて、マクロベースの手法には追加の「欠点」があります。コードが実行されるたびに、「元に戻すスタック」がクリアされます。つまり、必要に応じて、ブックに加えた変更を「元に戻す」ことはできません。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(3140)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
link凍結された行の浮動情報。