![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセルの表(データベース)を
並び替えるマクロを作っています。
コマンドボタンを押したらあらかじめ登録された
条件で並び替えされる、というところまではできました。
(ここでいう登録とは私が条件指定してVBAに記述したものです)
そこで質問なのですが、ユーザーフォームの上で
並び替えの条件(優先順位・降順、昇順)をユーザーに
指定してもらい、ボタンを押したら並び替えされる、
というものを作りたいのですが可能でしょうか。
なぜこんな面倒なことをするかというと、
複数のユーザーが扱うデータベースで、
並び替えの操作を簡略化したいのと、
間違った操作によるデータベースの破壊を
防止したいからです。
まずユーザーフォーム上のリストボックスの中に
優先順位をかける項目を入れておき、それを3つ
作りました。(並び替えの条件が3つまであるので)
次に各リストボックスの横にラジオボタンを置き、
降順、昇順を指定できるようにする。
(ここで、ラジオボタンのどちらかしか選択できないように
したいのですがその方法もわからないので教えてください)
そして、それぞれの指定された結果でVBAの記述(値)
を変えてコマンドボタンを押したら並び替えされる、
という風にしたいのです。(あくまでイメージですが)
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, ・・・とつづく記述で
上の記述のRange("A2")と、xlDescendingの値を
ユーザーフォーム上で選んだ結果によって
変更したい、ということなんですが、こんなことって
出来るものでしょうか。もしくは同じ様な事を
可能な書き方とかがあれば教えて頂きたいです。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
OptionButton でどちらかしか選べない組み合わせを複数持ちたい場合は、それぞれの組み合わせをフレームの上に置くか、若しくはプロパティで GroupName を同じにするかで対応可能です。
昇順・降順については
xlAscending = 1
xlDescending = 2
ですので、
i = 2
Order1:= i
のように書くことが出来ます。
それよりも、、、
希望しているのはソートダイアログと寸分違わぬ物に思えます。
ソートダイアログを呼んじゃえば良いのでは?
例)UserFormにボタンを置いて
Private Sub CommandButton1_Click()
'一番左のシートのA1からデータがあるとして
Worksheets(1).Range("A1").CurrentRegion.Select
Application.Dialogs(xlDialogSort).Show
End Sub
ありがとうございます。
まったくおっしゃる通りで、
ダイアログを呼べばいいんですね。
できればもう一つ教えて頂きたいのですが、
ソートダイアログを呼ぶ方法において、
1.範囲の先頭行で、選択可能項目を
タイトル行のみとする
2.オプションを選択不可にする
この2つを実現したいのですができますか?
No.5
- 回答日時:
#3の補足
例データ
abde
12t23w
34r5e
22e4e
のようなデータを範囲指定して
Sub test01()
Application.Dialogs(xlDialogSort).Show 1, "b", 2, "a", 2, "d", 1, 2, 1
End Sub
Showの次からパラメーターは
1ー 列方向キー、2ー行方向
第1キーの見出し文字列、
1-昇順、2-降順
第2キーの見出し文字列
1-昇順、2-降順
第3キーの見出し文字列
1-昇順、2-降順
1-タイトル行、2-データ行
で
Sub test01()
Application.Dialogs(xlDialogSort).Show 1, "b", 2, "a", 2, "d", 1, 1
End Sub
のように指定できます
オプションボタン選択不可方法は、すみませんわかりません。
No.4
- 回答日時:
#1です。
> 1.範囲の先頭行で、選択可能項目をタイトル行のみとする
ご質問の意味が解りません良く掴めません。
headerを指定するって事?
Application.Dialogs(xlDialogSort).Show 1, , , , , , , xlYes
> 2.オプションを選択不可にする
組み込みダイアログなので難しいと思います。
APIを駆使してやれば出来るのかも知れませんが、、、
お礼が遅くなりすいませんでした。
自分には難しすぎました。
もう少し時間のあるときに勉強してみます。
どうもありがとうございました。
No.3
- 回答日時:
#2です。
#2の回答をしているとき、引数でわからないことがあったので、書かなかったが、#1のご回答にも出ているDialogs(xlDialogSort)を使うのが、簡便で安定性があると思います。
Sub test01()
Range("a2:C10").Select
Application.Dialogs(xlDialogSort).Show 1, "年齢", 2, "氏名", 1
End Sub
のように、引数の順序は
orientation、key1、order1、key2、order2、key3、order3、header、custom、caseの順ですので
(http://www.geocities.jp/dgscs970/_homepage2/jite …
など参考に)
、これをプログラムで指定すると、
ダイアログ画面が出たときに、ダイアロウグ画面が既にそのように選択された状態で出すことができます。
すなわちOKだけクリックすればよい状態にできます。
これが進むと、マクロの記録のコードをそのまま書く形まえ行きます。
ご参考に。
データ例はA2:C5
住所氏名年齢
名古屋市佐々木54
千葉市近藤34
静岡市木下23
のような例で考えています。
ありがとうございます。
試してみたところ上手くいきました。
これに加えて、
1.範囲の先頭行で、選択可能項目を
タイトル行のみとする
2.オプションを選択不可にする
この2つを実現したいのですができますか?
No.2
- 回答日時:
UserForm1に
Combobox1 ソートキー選択用
OptionButton1 昇順選択用
OptionButton2 降順選択用
CommandButton1 ソート実行トリガ
のコントロールを各々1つはりつける。
UserForm1のコード部に
Dim cl
Dim asc
Private Sub ComboBox1_Click()
MsgBox UserForm1.ComboBox1.Text & "列でソート"
cl = UserForm1.ComboBox1.ListIndex + 1
End Sub
Private Sub CommandButton1_Click()
'MsgBox xlDescending 'Ascending
'MsgBox cl
Range("a3:H100").Sort key1:=Cells(1, cl), order1:=asc ',accending
End Sub
Private Sub OptionButton1_Click()
asc = 1
End Sub
Private Sub OptionButton2_Click()
asc = 2
End Sub
Private Sub UserForm_Initialize()
r = Range("iv2").End(xlToLeft).Column
'MsgBox r
For j = 1 To r
ComboBox1.AddItem Cells(2, j)
Next j
End Sub
のようなコードを作成。
これで実行して
下記例とした場合
コンボで「年齢」をクリック
オプションボタンで昇順のボタンをクリック
コマンドボタンをクリックでソートが実行され
A2:D7に
氏名郵便番号住所年齢
山田123-1111千代田区4
小島234-2222台東区21
大橋345-3333名古屋市23
野島567-3333岐阜市34
上野432-2222千葉市45
となった。
焦点がぼやけないように、体裁的なことは一切省略している。
コントロール利用の経験がなければ、難しいのではないですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) 範囲指定をした中で、住所の列をユーザー設定の並べ替えをしたい 3 2022/05/15 13:51
- Excel(エクセル) 【エクセル】並び替えからの並び替え方法 7 2022/07/22 09:46
- Excel(エクセル) オフィスをLibreOfficeからmicrosoft 2013に変えました。 1 2022/05/09 00:28
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる 2 2023/01/14 22:14
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- Excel(エクセル) [条件付き書式]の設定順の変更は可能か? 4 2022/12/07 10:37
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
マクロで作ったボタンのサイズ...
-
Excelで、ボタンにコメントをつ...
-
エクセルの画面にユーザーフォ...
-
VBAでオプションボタンなどそれ...
-
UPS警告音を止めたい
-
【Excel VBA】マクロボタンを表...
-
マクロ初心者です。 msgboxのre...
-
フォームコントロールから作っ...
-
入力済み、選択したセルに連動...
-
エクセルVBAオプションボタンの...
-
EXCELのマクロが 実行時エラー5...
-
ユーザーフォームをショートカ...
-
Excel ラジオボタンのリセット...
-
Access VBAでボタンの背景色を...
-
excel スクロールしても常にボ...
-
ボタンを画像で作るか、CSSでデ...
-
エクセル フォームの ボタン...
-
複数シートのボタンに同一の動...
-
日報の休日ボタン(トグルボタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
エクセルの画面にユーザーフォ...
-
UPS警告音を止めたい
-
ユーザーフォームをショートカ...
-
【Excel VBA】マクロボタンを表...
-
Excel ラジオボタンのリセット...
-
Excelで、ボタンにコメントをつ...
-
Accessのフォームでタブの色
-
エクセルで、オプションボタン...
-
マクロで作ったボタンのサイズ...
-
複数シートのボタンに同一の動...
-
フォームコントロールから作っ...
-
エクセルでマクロボタンを押す...
-
EXCELの塗りつぶしのボタ...
-
Excelにストップウオッチ?をつ...
-
EXCELのマクロが 実行時エラー5...
-
マクロ初心者です。 msgboxのre...
-
日報の休日ボタン(トグルボタ...
-
Access VBAでボタンの背景色を...
-
VBAでオプションボタンなどそれ...
おすすめ情報