
セルA1 に CommandButton1(ActiveX)を作り、下記のコードを割り当てています。(A列はすべてコマンドボタン専用セル)
A列以外すべてのセルはデータ入力セルとし、B 列 ・・C 列・・・というようにデータを列方向に増やしていきます。
各列ごとに複数行のデータが入力されますが、データ行が連続してない(空白行がある)と、データを並べ替えたときにソートの対象とならないようです。
データが不連続でも列全体がソートの対象となるよう、下記コードの修正をお願いできないでしょうか。
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect
Cells.Select
ActiveWorkbook.Worksheets("語彙").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("語彙").Sort.SortFields.Add Key:=Range(Range("b1"), Cells(1, Columns().Count).End(xlToLeft)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("語彙").Sort
.SetRange Range("b1").CurrentRegion
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.Protect
End Sub
No.2ベストアンサー
- 回答日時:
ソートの対象にする領域の設定をするだけで出来ます。
標準モジュールに次のように書いても、出来ます。
Sub 空白を含む特定域の並べ替え()
With Sheets(1).Sort
With .SortFields
.Clear
.Add Key:=Range("b3"), SortOn:=xlSortOnValues, Order:=xlAscending
' B3のセルを並べ替えの基準にして、昇順で並べ替えるための準備設定
End With
.SetRange Range(Range("b3"), Range("A1").SpecialCells(xlLastCell))
' B3から、データがある(右方向、下方向)の最も遠いセルまでを、空白も含めて
' 並べ替えの対象範囲に設定する
.Orientation = xlLeftToRight
' 並べ替えの方向を、左から右にするように設定
.Apply
' 並べ替えの実行
End With
End Sub

ご回答ありがとうございます。
おかげさまで上手くいったようです。
SpecialCells(xlLastCell)
が大変参考になりました。
No.3
- 回答日時:
No1です。
>常に最大のデータ範囲(途中の空白行も含めて)を選択するコードを知りたいのですが。
基準にできる行や列が存在するなら、最終行、最終列を求める End(xlup) や End(xlToLeft) を利用する方法で求めれば宜しいでしょう。
(ご提示のコードでも、key指定に使っているのでわかると思いますが)
それも面倒なら
ActiveSheet.UsedRange
を利用なされば宜しいでしょう。
(一部、空白セルを余分に含む場合がありますけれど・・)
ご回答ありがとうございます。
御礼が遅れて申し訳ありません。
なにしろド素人なもので、ご迷惑おかけします。
ActiveSheet.UsedRange
というのも使えるのですね。
色々と参考になりました。
また、よろしくお願いいたします。
No.1
- 回答日時:
こんばんは
>データ行が連続してない(空白行がある)と、データを並べ替えた
>ときにソートの対象とならないようです。
範囲の指定を、
>Range("b1").CurrentRegion
としているので、そうなるだけだなのでは?
値のあるセルが連続している範囲を指定していますよね?
>データが不連続でも列全体がソートの対象となるよう、
>下記コードの修正をお願いできないでしょうか。
どの範囲を指定したいのか、何も情報がないので修正のしようもありません。
例えば、B1:G100 の範囲を指定したいのなら、
Range("B1:G100")
にしておけば良いとか・・
ご質問には関係ありませんが、書き方は自由とは言え、同じ対象の内容を、Withの外で書いたり中で書いたりとわかりにくくありませんか?
ご回答ありがとうございます。
>どの範囲を指定したいのか、何も情報がないので修正のしようもありません。
:
データが増えていくので、範囲は指定できません。
常に最大のデータ範囲(途中の空白行も含めて)を選択するコードを知りたいのですが。
お探しの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) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA 最終行を選んで並び替え (空白セルを一番上に表示したい)
Excel(エクセル)
-
エクセル 空白を無視して並び替える方法を教えてください。
Excel(エクセル)
-
エクセルの並び変えで、空白セルを一番上にもってくる方法を教えてください。
Excel(エクセル)
-
-
4
Excel VBAにてソートが上手くいかない
その他(Microsoft Office)
-
5
エクセル マクロ 範囲指定で、データの最終行・最終列を取得したい
Excel(エクセル)
-
6
VBAでFormat がうまく使えない
Excel(エクセル)
-
7
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
8
エクセルで0を除いて昇順に並べ替えできますか
Excel(エクセル)
-
9
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
10
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
11
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
12
EXCELマクロコードを、それを含むファイルを開かずに編集したい
Excel(エクセル)
-
13
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
14
エクセルマクロで特定の範囲が空白という条件
Excel(エクセル)
-
15
エクセル2003で並べ替えする場合で、空白行を先頭ではなく末尾に表示し
Excel(エクセル)
-
16
excelVBA 項目ごとに連番をふりたい
Excel(エクセル)
-
17
最初の1回のみにボタンクリックでマクロ実行する
Visual Basic(VBA)
-
18
VBA ソートすると、1、11、2,3になって・・
Excel(エクセル)
-
19
エクセルVBA 最終行を選んで並び替え
Excel(エクセル)
-
20
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excel上でのデータ数字が連番で...
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excelでの検索結果を含む行だけ...
-
エクセル:横長の表を改行して...
-
Excelの入力規則で2列表示したい
-
スペースとスペースの間の文字...
-
エクセル セル内の文字数を超え...
-
「エクセル」特定の行(セル)...
-
エクセルで曜日に応じた文字を...
-
時間を「昼間」と「夜間」に分...
-
入退社日より各月末の在籍者数...
-
エクセルにデータを入力すると...
-
列の数字に100をかけたい
-
Excelのセル内文字の並び替えに...
-
セルをダブルクリックで、画像...
-
EXCELでA列とB列の文字が合わせ...
-
エクセルのsumifでかけ算してか...
-
Excelのセルに特定の文字列が含...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの入力規則で2列表示したい
-
複数の文字列のいずれかが含ま...
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
Excelでの検索結果を含む行だけ...
-
エクセルで曜日に応じた文字を...
-
「エクセル」特定の行(セル)...
-
エクセル:横長の表を改行して...
-
エクセルでセルの値分の個数の...
-
エクセルで表示されている数字...
-
スペースとスペースの間の文字...
-
列の数字に100をかけたい
-
エクセルで、毎日の走行距離(...
-
エクセルのsumifでかけ算してか...
-
時間を「昼間」と「夜間」に分...
-
エクセルのVLOOKUP関数について
-
Excelのセル内文字の並び替えに...
-
エクセルにデータを入力すると...
-
別のセルに値が入力されたら、...
おすすめ情報