Microsoft Excel VBA - 指定した範囲名を画面の左上端に配置する方法
◆概要
このページは、Excel VBAで指定した範囲名を画面の左上端に配置する方法について記載しています。
指定した特定のセルを画面の左上隅に配置する方法で作成したワークシートで、ユーザーが行を挿入していくと、最初に意図した場所が画面の左上端のならなくなります。上記のマクロでRange関数の引数に範囲名を指定してもよいのですが、その範囲が選択状態になってしまいます。そこで次のようなマクロを作成してみました。
◆Sample
次の例では、「Sheet1」というシートの範囲名「集計表」を左上端にしています。
Sheet1にあらかじめ「集計表」という範囲名を定義しておいてください。
範囲名を定義するには次のようにします。
Excel 2003の場合
- [挿入]メニューの[名前]-[定義]をクリックします(ショートカットキー:Ctrl+F3)。 )。
- 名前を入力します。ここでは「集計表」と入力してください。
- Enerキーを押します。
Excel 2007の場合
- 定義したい範囲をマウスで選択状態にしてから、リボンの[数式]タブを選択して、[名前の管理]ボタンをクリックします(ショートカットキー:Ctrl+F3)。
- [名前の管理]ダイアログボックスで[新規作成(N)]をクリックします。
- [新しい名前]ダイアログボックスが表示されますので、[名前(N)]テキストボックスに「集計表」と入力して、[OK]ボタンをクリックします。
- [閉じる]ボタンでダイアログボックスを閉じます。
Sub GotoName(シート名 As String, 範囲名 As String) ' **************************************************** ' Summary:引数で指定されたシート名の範囲名を画面の ' 左上端にする。 ' Args:シート名、範囲名 ' Written by:White Tiger ' Date:2009/07/31 ' **************************************************** Dim strSheetName As String ' シート名を格納する変数 Dim strGoto As String ' 範囲名を格納する変数 Dim 左上行 As Long ' 列番号を格納する変数 Dim 左上列 As Long ' 行番号を格納する変数 On Error GoTo Err_GotoName strSheetName = シート名 strGoto = 範囲名 Sheets(strSheetName).Activate Range(strGoto).Select 左上行 = ActiveCell.Row 左上列 = ActiveCell.Column ' 行番号が左上行、列番号が左上列のセルを画面の左上端にする Application.Goto Reference:=Cells(左上行, 左上列), Scroll:=True Exit Sub Err_GotoName: ' エラーが発生した時はエラー番号とエラーの説明を表示 MsgBox Err.Number & ":" & Err.Description End Sub
次にこのプロシージャーを呼び出すマクロを作成します。
Sub test() ' シート名と範囲名を指定してサブプロシージャを呼び出す Call GotoName("Sheet1", "集計表") End Sub
testプロシージャーにマウスカーソルを置いた状態で、F5キーを押下します。マクロが実行されて、Sheet1の「集計表」が画面の左上端になります。
なお、指定した範囲名がワークシートに設定されていないとき、次のエラーが発生します。
[1004:Rangeメソッドは失敗しました。_Globalオブジェクト]
このメッセージは、ユーザーには不可解名ものとなるでしょう。
従って、ユーザーにわかりやすいエラーメッセージを表示するために、
GotoNameマクロのエラーハンドラであるErr_GotoName:のエラー番号とエラーの説明を表示するステートメントをコメントアウトし、次のようにメッセージボックスを表示するステートメントを追加するとよいでしょう。
Err_GotoName: ' エラーが発生した時はエラー番号とエラーの説明を表示 ' MsgBox Err.Number & ":" & Err.Description If Err.Number = 1004 Then MsgBox "範囲名が適切ではありません。" & vbCrLf & _ "範囲名「" & strGoto & "」が設定されていません。", _ vbOKOnly + vbCritical, "範囲名エラー" End If End Sub
▼ページトップへ