よろしくお願いします。いつもgooの皆さんには大変お世話になっています
以下のマクロは、セル$B$14がWクリックされたら、 $B$14の左1文字を判断して
ソートするマクロです
gooの皆さんに教えていただいたマクロを一部改良しています
例 $B$14の左1文字は↓or↑で ↓タイトル のようになっています
このマクロを次のように手直ししたいのですが、どなたか教えてください
1、↓タイトル の時にWクリックしたら タイトルが ↑タイトル になって降順でソートする
2、↑タイトル の時にWクリックしたら タイトルが ↓タイトル になって昇順でソートする
1と2をWクリックする度に切り替えるということはフラッグ(スイッチ?)を使うのでしょうか
であれば、どこか、特定のセルをひとつ使って、そのセルに現在のフラッグ(スイッチ?)を
書き込むのでしょうか?
マクロをどう手直しすればよいでしょうか?
どなたか教えてください
以下が現状のソートマクロです
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$B$14" Then
'Cancel = True
'Cancel=True を加えると、オリジナルの動作(セル内編集)をキャンセル
'以後はマクロが終了してもダブルクリックで編集モードに入ることは不可
Dim Skey As Integer
Dim SortArea As String 'ソート範囲
SortArea = "B15:CT50" 'ソート範囲
Select Case Left(Target.Value, 1)
Case "↓"
Skey = 1
Case "↑"
Skey = 2
Case Else
Exit Sub
End Select
Range(SortArea).Sort _
Key1:=Range("B15"), _
Order1:=Skey, _
Header:=xlNo, _
Orientation:=xlTopToBottom
Cancel = True
'xlAscendingまたは1 昇順
'xlDescendingまたは2 降順
'1や2の数値でもどっちでもよい
'xlTopToBottom 省略可能
End If
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは!
他の方がお考えになったコードに手を加えるのは本意でないので、
当方なりにやってみました。
今回の場合はフラグは考えなくて良いと思います。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim str As String, myArea As Range
With Target
If .Address = "$B$14" Then
Cancel = True
str = Left(.Value, 1)
Set myArea = Range("B15:CT50")
If str = "↑" Then
myArea.Sort key1:=Range("B15"), order1:=xlAscending, Header:=xlNo
.Value = Replace(.Value, str, "↓")
Else
myArea.Sort key1:=Range("B15"), order1:=xlDescending, Header:=xlNo
.Value = Replace(.Value, str, "↑")
End If
End If
End With
End Sub
こんな感じでよいのでしょうか?m(_ _)m
tom04さんこんばんは
いつもお世話になってまして恐縮しています
あっという間の回答にびっくりです
なぜこんなに速くコードが書けるのか不思議でなりません
自分の頭の固さはどうしようもありません
早速コピーして動作確認したところ、前々から考えていたことが
一瞬のうちにできてしまいました
このコードの応用で他のセルもやってみようと思います
これから、じっくり勉強させてください
また引き出しがひとつ増えてうれしい限りです
ありがとうございました
With Targetは一番最初に教えていただきました
この書き方は今後見習わなければいけません
どうもありがとうございました
助かりました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで表
-
【マクロ】for next構文について
-
職場の人から聞かれており、こ...
-
ユーザー定義関数をアドイン登...
-
PDFの請求明細をエクセルにしたい
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
エクセルの関数について教えて...
-
エクセルで不等号記号(≠)が上に...
-
スプレッドシート、Excelでの数...
-
スプレッドシートで使う数式を...
-
Excelで50個のセルに同じ文字を...
-
[オートフィルタ]で抽出された...
-
エクセルの問題です。絶対値の...
-
エクセル関数を教えてください
-
各ページの1番上の表示について
-
Microsoft Officeの中古は信用...
-
pdfの表をexcelにはりつけて計...
-
Excelのif関数で文字が見えなく...
-
Excel 2019 は、SPILL機能があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報
あと、以下も新しく知りました
.Value = Replace(.Value, str, "↑")
セルの左一文字をどうやって書き換えるのかがさっぱり思いつきませんでした
どうもありがとうございました