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シートの保護時にデータの並び替え
その他(Microsoft Office)
-
シート保護してても並び替えをしたい。
Excel(エクセル)
-
シートを保護した時でも並べ替えをするには?〔Excel〕
Excel(エクセル)
-
-
4
[Excel]保護されたシートのマクロによるオートフィルタ有効設定について
Excel(エクセル)
-
5
オートフィルタの使用にチェックを入れても使えない
その他(Microsoft Office)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
EXCEL(VBA)でシート保護がかかったシートにクリックボードから貼り付けしたい
Visual Basic(VBA)
-
8
EXCELマクロ 保護されているシートのダイアログを表示させない方法
Visual Basic(VBA)
-
9
EXCEL VBAで条件付き保護について
Excel(エクセル)
-
10
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
11
エクセルの列を範囲選択しての並べ替えを禁止(制限)したい
Excel(エクセル)
-
12
EXCEL シート保護するとマクロが正常動作しない
Excel(エクセル)
-
13
ShowAllDataのエラーを回避したい
Access(アクセス)
-
14
エクセルVBA 「On Error GoTo 0」について
Excel(エクセル)
-
15
ロックしたセルのコピー&貼り付け
Excel(エクセル)
-
16
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
17
Excelのテーブル上のセルの保護はどうすればいい?
Excel(エクセル)
-
18
【ExcelVBA】マクロの入ったシートをコピーしても新しいシート内でマクロを動作させるには?
Excel(エクセル)
-
19
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
20
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロボタンが編集...
-
Application.Runエラー(1004)
-
別シートのマクロを実行する方法
-
エクセルVBAで、ボタンの文字を...
-
Access終了時にマクロまたはVBA...
-
マクロ 戻るボタンを押したらシ...
-
マクロが登録できません
-
特定のシートだけ印刷はマクロ...
-
access2010 コマンドまたはアク...
-
プロシージャが大きすぎます!
-
今日の日付の範囲を指定して印...
-
private sub にしたらマクロが...
-
AccessでExcelファイルを印刷
-
エクセルのマクロ
-
「Access」のフォームを...
-
ACCESS エラーメッセージ表示...
-
シート保護を掛けたまま並べ替...
-
オートシェイプの黄色いハンド...
-
エクセルのマクロ名一覧
-
Workbook_Openを起動時以外に呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのマクロボタンが編集...
-
別シートのマクロを実行する方法
-
Application.Runエラー(1004)
-
Access終了時にマクロまたはVBA...
-
シート保護を掛けたまま並べ替...
-
access2010 コマンドまたはアク...
-
エクセルVBAで、ボタンの文字を...
-
マクロ 戻るボタンを押したらシ...
-
マクロが登録できません
-
エクセル VBA SendKeys ループ...
-
InputBox内の表示について
-
ExcelのVBAでDisplayalertsで警...
-
特定のシートだけ印刷はマクロ...
-
今日の日付の範囲を指定して印...
-
マクロとモジュールの違いを教...
-
エクセルの右クリックにオートS...
-
Workbook_Openを起動時以外に呼...
-
プロシージャが大きすぎます!
-
別シートのトグルボタンを指定...
-
アクセス:検索フォームボタンに...
おすすめ情報
失礼しました。「userInterfaceOnly:=True 'こちらはチェックしていません」こちらまで入れてしまっていました。それは除いたのですが昇順、降順のボタンは白く押せない状態です。