- ベストアンサー
エクセル2003 並び替えとマクロ
OSはウィンドウズXPです。質門は、 1.シートを保護するとマクロが動かないこと 2.マクロの実行前にブックを新しく保存したいことです。 ワークシートは B---略-----L---------N -------O 1 所在 コード 所有者 備考 2 東京 1 甲 3 埼玉 2 乙 *** マクロはボタンで作動するようにして以下のようになってます。 Private Sub 所有者ソート_Click() タイトル = "選択" メッセージ = "所有者で並べ替えます" スタイル = vbYesNo + vbQuestion + vbDefaultButton1 + vbApplicationModal yesno = MsgBox(メッセージ, スタイル, タイトル) If yesno = vbYes Then 上 = 5 左 = 2 右 = 25 '右端 25=X列 下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row Range(Cells(上, 左), Cells(下, 右)).Select Selection.Sort _ Key1:=Range("N1") _ , Order1:=xlAscending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin End If End Sub B列からX列までデータがあり、VLOOKUP関数でリストから参照させたりしてます。この関数の入ったセルは変更したくないのでロックしてます。保護したまま並び替えできるとベストですが、できますか? さらに並び替えのミスで(たとえば選択範囲がN列までになってしまい備考欄が誰のかわからなくなった等)もとに戻したいとき、マクロだと"元に戻す"がきかないので、作業前の状態を保存しておきたいです。 ちなみにエクセルは初心者、マクロは初心者以下です。 素直にマクロを使わずにやったほうがよいですか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
作業前の状態を保存しておきたいのなら、そのシートは並べ替えしないで複製したシートで並べ替えればいいのでは? シート保護のパスワードが仮にXXXXとした場合、以下でお試しください。 Sub test1() ActiveSheet.Copy After:=ActiveSheet Set ns = ActiveSheet With ns .Unprotect Password:="XXXX" タイトル = "選択" メッセージ = "所有者で並べ替えます" スタイル = vbYesNo + vbQuestion + vbDefaultButton1 + vbApplicationModal yesno = MsgBox(メッセージ, スタイル, タイトル) If yesno = vbYes Then 上 = 5 左 = 2 右 = 25 '右端 25=X列 下 = .Range(.Cells(上, 左), .Cells(上, 左)).End(xlDown).Row .Range(.Cells(上, 左), .Cells(下, 右)).Sort _ Key1:=Range("N1") _ , Order1:=xlAscending _ , Header:=xlGuess _ , MatchCase:=False _ , Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin .Protect Password:="XXXX" End If End With End Sub
その他の回答 (1)
- FEX2053
- ベストアンサー率37% (7991/21371)
マクロが実行している間は、シートの保護が無くても大丈夫なはずなので SUB ActiveSheet.UnProtect : ActiveSheet.Protect END こうやって、マクロの開始前にシートの保護を解除、マクロの終了直前に シートの保護を設定すればいいです。詳細はVBAヘルプの「PROTECT」と 「UNPROTECT」を参照してください。
お礼
ありがとうございました。
お礼
シートをコピーするべきでしたね。 単純なことに頭がまわらない・・・・ どうもありがとうございました。 わざわざ書いていただいて感謝します。