
No.4ベストアンサー
- 回答日時:
コードをみてどのようにしたいのか分かりました。
これは、並べ替えしたい列にマウスカーソルを置いて、
マクロ(ボタンで良い)を実行してみてください。
'//
Sub SortProgram1A()
Dim num As Integer
num = ActiveCell.Column
If ActiveSheet.AutoFilterMode = False Then
MsgBox "オートフィルターがありません。", vbCritical
Exit Sub
End If
With ActiveSheet.AutoFilter.Range
If num > .Columns.Count Then Exit Sub
.Sort Key1:=.Cells(1, num), _
Order1:=xlAscending, _
Header:=xlYes
End With
End Sub
'//
'ActiveSheet.AutoFilterMode は、AutoFilter が設置させていないと実行に移さないようにしています。
'ActiveSheet.AutoFilter.Range これは、オートフィルター上の範囲の意味です。
.Cells(1, num), これは、任意の列のオートフィルターの範囲のヘッダー位置を示しています。
---------参考コード--------------------------
シフトキーを押したまま実行すると、降順になります。
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Const VK_SHIFT = &H10 'この上2つは、モジュールのてっぺんに置く
Sub SortProgram1Ar()
Dim num As Integer
Dim ad As Integer
num = ActiveCell.Column
If ActiveSheet.AutoFilterMode = False Then
MsgBox "オートフィルターがありません。", vbCritical
Exit Sub
End If
If GetKeyState(VK_SHIFT) < 0 Then
ad = xlDescending 'シフトキーを押したら、降順に変わる
Else
ad = xlAscending
End If
With ActiveSheet.AutoFilter.Range
If num > .Columns.Count Then Exit Sub
.Sort Key1:=.Cells(1, num), _
Order1:=ad, _
Header:=xlYes
End With
End Sub
回答有難う御座います。
選択したセルの項目の並べ替え出来るようになりました。
みんなに使ってもらう為降順のボタンも作ろうと思います。
No.3
- 回答日時:
>並べ替えが簡単に出来ないようですので選択したセル列の昇順と降順ボタンを作ってマクロを割り当てるのがいいのでしょうか。
私には、それしか思いつかなかったのです。
逆に、他に何か思いつくことはありませんか?例えば、右クリックメニューに入れるとか。
わざわざ、セルのロック自体を外すよりは良いかと思います。
私自身は、それをどのぐらい、見栄えがよく作れるか、ということを考えてしまいます。
それで、非常に小さいボタン(セルの半分ぐらい)は、フォームコントロール側のほうがよいようです。ActiveX コントールですと、1つのボタンでいろいろ違った動きを示すことが出来ますが、小さい場所に納まりません。
フォームコントロールのボタンひとつで、コントロールキーを押したままとかで、別のマクロを実行できる方法もあります。ただ、ちょっと難しい内容になってしまいます。
回答有難う御座います。
範囲をCurrentRegionとしアクティブセルを基準に並べ替えをしようと思い以下のように書いてみましたがうまく動きませんでした?
Sub 並べ替え()
Dim c As Range
Set c = ActiveCell
Debug.Print (c.Value)
Range("A5").CurrentRegion.Sort 'A5を基に範囲選択ですがA5が文字化けしています'
Key1:=c, _
Order1:=xlAscending, _
Header:=xlYes
End Sub
No.2
- 回答日時:
こんばんは。
>こちらはチェックしていません」こちらまで入れてしまっていました。
たいへん失礼しました。
ところで、昇順降順の並び替えは別ですね。こちらも気が付かなかったのですが、あくまでも、オートフィルターだけでした。
以下のように、Protectに、
AllowSorting:=True を加えてあげればよいようですが、それではダメなのです。
ここで、オートフィルター範囲のロックを解除してあげないといけないのです。
Range("A1:E11").Locked =False '←例えばの範囲ですが、これが必要になってしまうのです。
ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect Password:="", _
AllowDeletingRows:=True, _
AllowSorting:=True, _
userInterfaceOnly:=True
これで良ければ、お終いですが、
ちょっと、ロックを外したら意味がありません、となるのではないかと思います。
いっそ、 AllowSorting:=True, _ をやめて、
マクロで処理してしまったほうがよいかもしれませんね。
マクロなら、userInterfaceOnlyで、うごかせます。
内容は以下のような簡単な対話形式ですが。(もっとさり気なくできればよいのですが、もしくは、ヘッダーの部分のロックを外して、そこにイベントを設ける方法もありますね。)考えていくと思った以上に難しいです。
Sub Button_Click1()
Dim num As Integer
num = Application.InputBox("何列目を並べ替えますか?")
If num <= 0 Then Exit Sub 'キャンセルボタンでも、0になります。
With Range("A1").CurrentRegion
If num > .Columns.Count Then Exit Sub '範囲の列数を越えたら、マクロの離脱
.Sort Key1:=.Cells(1, num), Header:=xlYes 'デフォルトで昇順になっています。
End With
End Sub
回答有難う御座います。
並べ替えが簡単に出来ないようですので選択したセル列の昇順と降順ボタンを作ってマクロを割り当てるのがいいのでしょうか。
No.1
- 回答日時:
こうすればよいはずです。
ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect Password:="pass", AllowDeletingRows:=True, userInterfaceOnly:=True , userInterfaceOnly:=True 'こちらはチェックしていません。
回答有難う御座います。
試させていただきましたところ「実行時エラー'448': 名前付き引数が見つかりません。」となってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでシートの保護をかける際に「書式設定の変更」を有効にする 1 2023/04/17 18:18
- Visual Basic(VBA) ExcelVBA ドロップボックスで月を選択するとそれ以降のデータが残るようにしたい。 3 2022/12/16 14:53
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- その他(Microsoft Office) エクセル VBAについて 2 2022/09/21 22:21
- その他(Microsoft Office) エクセルで串刺ししたシートの並べ替えをしたいです 4 2023/02/14 11:59
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
- Visual Basic(VBA) エクセル VBAについて教えてください 2 2023/04/26 13:25
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
このQ&Aを見た人はこんなQ&Aも見ています
-
シート保護してても並び替えをしたい。
Excel(エクセル)
-
Excelシートの保護時にデータの並び替え
その他(Microsoft Office)
-
シートを保護した時でも並べ替えをするには?〔Excel〕
Excel(エクセル)
-
-
4
[Excel]保護されたシートのマクロによるオートフィルタ有効設定について
Excel(エクセル)
-
5
オートフィルタの使用にチェックを入れても使えない
その他(Microsoft Office)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
10
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
11
Excelで、あるセルだけ入力させたい、オートフィルターも使わせたい際のシートの保護
Excel(エクセル)
-
12
VBAでシートの保護をかける際に「書式設定の変更」を有効にする
Visual Basic(VBA)
-
13
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
14
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
15
EXCELで複数のシートを一度に「シートの保護」することはできますか?
Excel(エクセル)
-
16
ShowAllDataのエラーを回避したい
Access(アクセス)
-
17
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
18
エクセルでエラーが出て困っています。
Excel(エクセル)
-
19
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
20
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.Runエラー(1004)
-
エクセルのマクロボタンが編集...
-
別シートのマクロを実行する方法
-
Access終了時にマクロまたはVBA...
-
シート保護を掛けたまま並べ替...
-
エクセルVBAで、ボタンの文字を...
-
アクセスの更新クエリをフォームで
-
マクロ 戻るボタンを押したらシ...
-
アクセスのマクロについて
-
AccessでExcelファイルを印刷
-
InputBox内の表示について
-
ACCESS 再クエリを解除...
-
アクテイブなブック以外を一括...
-
ユーザーフォームに今日の日付を
-
Workbook_Openを起動時以外に呼...
-
excelで会議室予約表の作成(マ...
-
RunMacroメソッドではsubプロシ...
-
今日の日付の範囲を指定して印...
-
ExcelのVBAでDisplayalertsで警...
-
エクセルのマクロ名一覧
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別シートのマクロを実行する方法
-
Application.Runエラー(1004)
-
エクセルのマクロボタンが編集...
-
Access終了時にマクロまたはVBA...
-
エクセルVBAで、ボタンの文字を...
-
シート保護を掛けたまま並べ替...
-
access2010 コマンドまたはアク...
-
マクロ 戻るボタンを押したらシ...
-
InputBox内の表示について
-
エクセル VBA SendKeys ループ...
-
アクセスのマクロについて
-
AccessでExcelファイルを印刷
-
特定のシートだけ印刷はマクロ...
-
private sub にしたらマクロが...
-
マクロとモジュールの違いを教...
-
別シートのトグルボタンを指定...
-
ExcelVBAで右クリックメニュー...
-
マクロが登録できません
-
エクセルのマクロ
-
エクセルの右クリックにオートS...
おすすめ情報
失礼しました。「userInterfaceOnly:=True 'こちらはチェックしていません」こちらまで入れてしまっていました。それは除いたのですが昇順、降順のボタンは白く押せない状態です。