Home » エクセルマクロ・Excel VBAの使い方 » Sortオブジェクト » テーブル・ListObjectのSortではHeaderにxlNoを設定できない

テーブル・ListObjectのSortではHeaderにxlNoを設定できない

対象:Excel 2010, Excel 2013, Windows版Excel 2016

SortオブジェクトのHeaderプロパティの基本について解説しました。

この記事で言及していた、Sort.Headerに定数xlNoを設定できないケースをご紹介します。

結論からいえば下図のようなテーブル(ListObjectオブジェクト)の、

ListObjectのSortはHeaderにxlNoを設定できない

Sortプロパティで取得したSortオブジェクトでは、HeaderにxlNoを設定できません。

[スポンサードリンク]

テーブルのSortでHeaderにxlNoを設定できないことを確認するサンプルマクロ

具体的なコードで確認しましょう。

先日ご紹介したSubプロシージャを少しだけ修正して以下のようにした場合、「sot.Header = xlNo」の行で実行時エラーが発生します。


Sub SortオブジェクトのHeaderプロパティを確認する2()
 Dim sot As Sort
 ' Set sot = ActiveSheet.Sort
 Set sot = ActiveSheet.ListObjects(1).Sort

 sot.SortFields.Clear

 ' sot.SetRange Range("A1:B6")
 sot.Header = xlNo ' ← xlNoを指定すると実行時エラーが発生する
 sot.SortFields.Add Key:=Range("B1")

 sot.Apply
End Sub

ご紹介済みのSubプロシージャとどこが違うかを確認しましょう。

まず、オブジェクト変数にセットしているSortオブジェクトを取得するオブジェクト式(オブジェクトを取得するコード)が異なります。
  ' Set sot = ActiveSheet.Sort
  Set sot = ActiveSheet.ListObjects(1).Sort

WorksheetオブジェクトのSortプロパティではなく、

ListObjectのSortはHeaderにxlNoを設定できない

ListObjectオブジェクトのSortプロパティでSortオブジェクトを取得しています。

ListObjectのSortはHeaderにxlNoを設定できない

つづいて以下の行をコメントアウトしています。
  ' sot.SetRange Range("A1:B6")

ヘルプに「範囲がテーブル内にある場合は使用できません。」と記載されているとおり、ListObjectオブジェクトのSortプロパティで取得したSortオブジェクトの場合、SetRangeメソッドを使えませんのでこの行をコメントアウトしています。

ListObject.Sortプロパティで取得したSortオブジェクトは、どのセル範囲かは既にハッキリしているため、SetRangeメソッドを使えないのは納得の仕様です。

同じ理由で、HeaderプロパティにxlNoを指定すると実行時エラーが発生します。

テーブルは構造がしっかりしていて、見出し行が必ず先頭に存在しています。

だからこそ、テーブルではスクロールしたときに、

ListObjectのSortはHeaderにxlNoを設定できない

上図のような状態になるわけです。
Sort.Header = xlNoで実行時エラーが発生するのは、納得の仕様です。

ローカルウィンドウでSort.Headerを確認しましょう

Sort.Headerの初期値をローカルウィンドウなどで確認すると、この仕様をより深く理解できます。

まずHeaderプロパティにxlNoを設定できる、WorksheetオブジェクトのSortプロパティで取得したSortを確認します。

ListObjectのSortはHeaderにxlNoを設定できない

上図のように、オブジェクト変数にSortオブジェクトがセットされた段階で、Sort.Headerの値はxlGuessになっています。

ヘルプに記載のあるとおり、Sort.Headerプロパティの規定値xlGuessで初期化されることを確認できます。

つづいてこの記事でご紹介しているListObjectのSortです。

ListObjectのSortはHeaderにxlNoを設定できない

オブジェクト変数にSortオブジェクトがセットされた段階で、Sort.Headerの値はxlYesになっています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sortオブジェクト » テーブル・ListObjectのSortではHeaderにxlNoを設定できない

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » Sortオブジェクト » テーブル・ListObjectのSortではHeaderにxlNoを設定できない

「Sortオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.