![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?a65a0e2)
*** ソース ***
Sheets("Sheet 1").Select
Range("B2:H92").Select
Selection.Sort Key1:=Range("C3"), Order1:=xlAscending, Key2:=Range("H3") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
Range("B2").Select
Sheets("Sheet 2").Select
Range("B2:K49").Select
Selection.Sort Key1:=Range("C3"), Order1:=xlAscending, Key2:=Range("I3") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
Range("B2").Select
... 以下省略
*************
上記のように複数のシートを一括してソートを行うようにマクロを組んでいます。
ですがマクロを実行するとタイトル行も含めてソートを行うなど、おかしな挙動になってしまいます。
ソートの条件としては「範囲の先頭行」を「タイトル行」で行わせたいのですが、「データ」でソートを行うシートが出てしまうのです。
太字にすると回避できるなど試したのですが、うまくいかなかったです。
Header:=xlYes にする事でも回避できるとあったのですが、変数を説明している一覧などが見つからなかった為、試していません。
よい方法をご存知の方がいましたら、ご教授下さい。
No.5ベストアンサー
- 回答日時:
>どのような検索ワードを使えばいいでしょうか?
1回目「vba sort 引数」
等で、適当に読んでから
2回目「vba sort Header」
>的確なページが出てこないんですが、
上記でも「Excel Selection.Sort Header」と結果は大差ないかと思いますが、幾つかのページを拾い読みしながら、的確なキーワードを設定していくしか無いでしょう。
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VB …
http://q.hatena.ne.jp/1087187790
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VB …
Selection.Sort は用例の一つなので、Range("A1:Z100").sort などの使い方もあり、Sort メソッドのみで検索する方が良いと思います。
度々の回答ありがとうございます。
「Excel VBA Sort Header」に検索ワードを変えた所、的確なページを数件見つける事ができました。
ここまでシビアに検索ワードを指定しなくてもヒットするかと思っていたので、考えが甘かったようです。
参考サイトの掲示ありがとうございました。
No.6
- 回答日時:
ついでなので、Sortメソッドの仕様も書いておきます。
Function Sort([Key1], [Order1 As XlSortOrder = xlAscending], [Key2], [Type], [Order2 As XlSortOrder = xlAscending], [Key3], [Order3 As XlSortOrder = xlAscending], [Header As XlYesNoGuess = xlNo], [OrderCustom], [MatchCase], [Orientation As XlSortOrientation = xlSortRows], [SortMethod As XlSortMethod = xlPinYin])
上記の「Order1 As XlSortOrder = xlAscending」は「Oder1はXlSortOrder型のパラメータで省略時はxlAscending」と言う意味です。
さらについでに、XlYesNoGuess型の仕様も。
Enum XlYesNoGuess
xlGuess = 0
xlYes = 1
xlNo = 2
End Enum
SortメソッドのHeaderパラメータは「Header As XlYesNoGuess = xlNo」ですので「XlYesNoGuess型のパラメータで省略時はxlNo」となります。
つまり、Headerは「列挙型XlYesNoGuessのメンバ、xlGuess、xlYes、xlNoのいずれかを指定可能」となります。
なお、ヘルプファイルがインストールされて居ない場合(Excel2000以降のOfficeに限りますが)Visual Basic Editorの画面でF2キーで「オブジェクトブラウザ」を呼び出し、仕様が知りたい単語を双眼鏡の左に入力して双眼鏡を押して見て下さい。上記に書いた位の簡易的な説明が呼び出せます。
No.4
- 回答日時:
Headerパラメータの意味と動作は以下の通りです。
・Header:=xlNo
現在のセレクト範囲の先頭行をデータに含め、Key1、Key2、Key3パラメータの行位置は参照しない。
・Header:=xlYes
現在のセレクト範囲の先頭行をタイトルとしてデータから除外し、Key1、Key2、Key3パラメータの行位置は参照しない。
・Header:=xlGuess
現在のセレクト範囲の先頭行と、Key1、Key2、Key3パラメータの行位置を比較し、同じ行であれば先頭行をデータに含め、違う行であれば先頭行をタイトルとしてデータから除外する。
Header:=xlGuessを指定した時の動作の例は以下の通りです。
・範囲の先頭をタイトル行にする
Range("B2:K49").Select
Selection.Sort Key1:=Range("C3"), Order1:=xlAscending, Key2:=Range("I3") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
Header:=xlGuessで、選択範囲の先頭がB2で「2」、キー位置がC3及びI3で「3」、結果「2≠3」で先頭行がタイトルとなる。
・範囲の先頭をデータに含める
Range("B2:K49").Select
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("I2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
Header:=xlGuessで、選択範囲の先頭がB2で「2」、キー位置がC2及びI2で「2」、結果「2=2」で先頭行がデータとなる。
マクロのコードを良く見て、HeaderにxlGuessを指定していて、Range([範囲]).Selectの先頭行の行番号と、Key1、Key2、Key3の行番号が「同じ行番号」になっていないか、確認してみましょう。
この回答への補足
回答ありがとうございます。
3種類のパラメータの説明ありがとうございました。
しかし xlGuess の挙動説明について少々納得できません。
質問文に挙げましたように Header:=xlGuess を指定しているものの、同じ行を指定しているものは1つもありません。
抜粋して記載してありますが、このソートマクロは全て先頭行と同一になる Key は指定していません。
にも関わらず、先頭行をタイトルとは扱わずデータとして処理するシートがあります。
chie65536さんの説明通りだとすれば、今回の件は発現しなかったはずなのです。
No.3
- 回答日時:
Excelは、一度も操作したことがない門外漢ですが、ソースの書き方が気になりました。
そこで、少し、手を入れてみました。
修正は、コードスタイルだけです!
ルーチンはそのままです。
Private Sub CommandButton1_Click()
Dim I As Integer
Dim strSheet As String
For I = 1 To 3
strSheet = "Sheet" & Trim(Str$(I))
With Worksheets(strSheet)
.Select
.Range("B2:H92").Select
Selection.Sort Key1:=.Range("C3"), Order1:=xlAscending, Key2:=.Range("H3") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
.Range("B2").Select
End With
Next I
End Sub
アドバイスありがとうございます。
VBでプログラムを組んだ事はほとんどないのですが、できればExcelマクロで自動記録されたソースのまま使いたいです。(^^;
VBAなので変数を宣言したり、For文で繰り返したりも可能なのですね。
こういう使い方もできるのだと勉強になりました。
No.1
- 回答日時:
>変数を説明している一覧などが見つからなかった為、試していません。
Selection.Sort の Sort にカーソルを置いて、[F1] キーでヘルプが出ますし、ネットでも解説が沢山あります。
xlGuess と指定すると自動判別になります。
この回答への補足
回答ありがとうございます。
C:\Program Files\Microsoft Office\Office\VBAXL8.HLP ファイルが見つかりません。
ヘルプファイルって容量節約の為にインストールしない所が多いですよね。
初めに書いておけば良かったのですが、企業のPCなのでヘルプファイルが入っていないのです。
Googleで「Excel Selection.Sort Header」の単語で検索掛けても的確なページが出てこないんですが、どのような検索ワードを使えばいいでしょうか?
他にも「Excel 並べ替え マクロ」「Excel ソート マクロ」...etc
で検索掛けましたが、ヘルプファイルがあるからなのか詳しい解説は見つかりませんでした。
xlGuessは自動判別なのですね。
では xlYes がタイトル行で、xlNo がデータなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) Excel_マクロ_現在開いているシートにマクロを実行したいです 1 2023/02/14 23:54
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
Excel VBAにてソートが上手くいかない
その他(Microsoft Office)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
-
4
ADO VBA 実行時エラー3021
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
SUMIFで数値が入力されているセ...
-
Excel関数:「0」を除いた標準...
-
更新前と更新後の差分をVBAを使...
-
エクセル、正数のみの集計[(負...
-
値の入っているセルのうち、一...
-
エクセル 8ケタの数字から日数...
-
エクセルで何種類のデータがあ...
-
ピボットテーブル 0個の行を...
-
エクセル日付 文字列の関数がエ...
-
Excelで、72列のデータがありま...
-
複数の候補列から、検索値と一...
-
入力するとかってにセルの色が...
-
エクセルに入力された日付「S40...
-
Excel VBAでデータを自動処理し...
-
エクセル セル内の重複する文...
-
空白セルと行に色をつけるVBA E...
-
Excelで複数列かつ複数行分の一...
-
エクセル2000で〇×の並び替えを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
SUMIFで数値が入力されているセ...
-
更新前と更新後の差分をVBAを使...
-
ピボットテーブル 0個の行を...
-
値の入っているセルのうち、一...
-
エクセル、正数のみの集計[(負...
-
エクセルで何種類のデータがあ...
-
Excel関数で、範囲内の最後のセ...
-
SUMPRODUCT関数 行が増えても...
-
エクセルに入力された日付「S40...
-
Excelのマクロで行を間引きたい
-
エクセル 8ケタの数字から日数...
-
エクセル日付 文字列の関数がエ...
-
correl関数の範囲指定
-
Excelで順番を逆に
-
複数の候補列から、検索値と一...
-
Excelで複数列かつ複数行分の一...
-
【Excel】歯抜けデータの集約
おすすめ情報