HOME技術ExcelExcel VBAでシートを並び替える

Excel VBAでシートを並び替える

ExcelVBAでシート内のデータを並び替える方法です。

VBAのコード

Endrow  = Worksheets(SheetName).Range(“A1”).End(xlDown).Row
OrderRange = “A1:I” & Endrow
Worksheets(SheetName).Select
Worksheets(SheetName).Range(OrderRange).Select
Selection.Sort Key1:=Worksheets(SheetName).Range(B1), Order1:=xlAscending, Header:=xlGuess

解説

Endrow…そのシートの最終行を格納。
OrderRange…並び替える範囲を格納。
SheetName…そのシートの名前

まず、Endrowにそのシートの最終行を獲得させます。そのために、最初から最後まで必ず入力されている列を指定します。ここではA1としています。
途中で入力が途切れていたりすると、そこまでを最終行として認識してしまいます。

Selection.Sortを使うと、指定した範囲内を並び替えることができます。
Key1…範囲を指定します。Rangeオブジェクトで指定。Key2、Key3まで指定可能。
Order1…xlAscendingだと昇順、xlDescendingだと降順。Order2、Order3まで指定可能。
Header…xlGuessで先頭行をタイトル行であるか否かを自動で判別します。xlNoで先頭行をタイトルとみなさず並び替えの対象とします。xlYesで先頭行をタイトル行とみなし、並び替えの対象から外します。

関連記事

Excelで開発タブを表示する

ExcelでVBAをつくるときに「開発」メニューを使いますが、最初は表示されていません。 「開発」を表示するには、Excelを起動して、「ファイル」→「オプション」→「リボンのユーザー設定」から、「リ…続きを読む

Excel VBA:フィルタを操作して絞り込む

Excel VBAでフィルタ操作をして、行を絞り込みむ方法です。 コード Sub autoFilter(Retsu, Atai) Worksheets(“シート名”).Rang…続きを読む

Excel VBAで他のプログラムを実行する際にウィンドウを最小化する

Excel VBAで他のプログラムを実行した際に、実行しているプログラムのウィンドウを最小化表示にする方法です。 CreateObject(“WScript.Shell”).R…続きを読む

Excel VBA:メールを送信する

Excel VBAからメールを送信するボタンをつくります。 パスワードロックをかけたブックを利用していて、パスワードがわからなくなったらメールを送信してパスワードを教える機能を付けようと思い、調べまし…続きを読む

Excelで数字をコピーしたときに連番にならない

Excelで数字が入力されているセルの右下にマウスカーソルを合わせて、下にコピーしていくと、通常は数字が1つずつ足された連番の値でコピーされていきます。 それが何度やっても、何をやっても連番にならなか…続きを読む

Excelのフォームのタブオーダーを指定する

Excelでフォームを設定し、部品を複数配置していると、タブキーやEnterキーを押すと次の部品にフォーカスを飛ばすことができます。 この順序が意図したとおりでない場合に、自分で設定する方法を調べまし…続きを読む

Excel:保存先の場所を常にデスクトップにする

Microsoft Excel2019で新規に保存をしようとするとOne Driveなどが最初に候補にあがってきてしまい、コンピュータ上に保存したいときに、いちいちデスクトップを指定するのに手間取りま…続きを読む

Excel VBAで「はい」「いいえ」の条件分岐をする

Excel VBAでメッセージ(質問)を表示して、ユーザに「はい」「いいえ」の選択をさせて、その結果で処理を分岐させる方法です。 if文による条件分岐 条件分岐には以下のようなif文を使います。 If…続きを読む

Excel VBA:指定した列を非表示にする

Excel VBAで、予め指定した列を非表示にします。 コード hiddenColumn = Array(3, 4, 5, 6) For i = 0 To UBound(hiddenColumn) W…続きを読む

Excelで複数部印刷しようとしても指定部数印刷されない

Excelを開いて複数部印刷しようとしても、指定部数が印刷されない不具合への対処法です。 例えば、5部印刷しようとしても、1部ないしは2部しか印刷されません。 そして、エラーメッセージとして「【プリン…続きを読む