ラベル ワークシート の投稿を表示しています。 すべての投稿を表示
ラベル ワークシート の投稿を表示しています。 すべての投稿を表示

VBA シートの保護(保護の解除)



シートの保護


VBAを使ってエクセルシートの保護をする方法とその解除方法です。
エクセル上だと[リボン]→[校閲]→[シートの保護]→・・・と同じ動作を再現します。


メソッドなど
Worksheet.Protect


サンプルコード(パスワード設定なし)
Sub hogo()
    'アクティブシートの保護
    ActiveSheet.Protect    
End Sub


実行結果イメージ


解説
例としてActiveSheetに対してシートの保護をする処理をしています。

WoekrSheet.Protectはワークシートを保護するメソッドです。
[校閲]から[シートの保護]を選択すると出てくるオプション設定する「パスワード」や「セルの選択の許可」などのパラメータはProtectの後に記述することで指定できます。



パラメータ一覧
名前 内容 既定値
Contents シートとロックされたセルの内容の保護 True/False True
Password パスワード 文字列
AllowFormattingCells セルの書式設定 True/False False
AllowFormattingColumns 列の書式設定 True/False False
AllowFormattingRows 行の書式設定 True/False False
AllowInsertingColumns 列の挿入 True/False False
AllowInsertingRows 行の挿入 True/False False
AllowInsertingHyperlinks ハイパーリンクの挿入 True/False False
AllowDeletingColumns 列の削除 True/False False
AllowDeletingRows 行の削除 True/False False
AllowSorting 並び替え True/False False
AllowFiltering オートフィルタの使用 True/False False
AllowUsingPivotTables ピボットテーブル レポートを使用する True/False False
DrawingObjects オブジェクトの編集 True/False True
Scenarios シナリオの編集 True/False True
UserInterfaceOnly 画面上からの変更保護 True/False False

Contentsの動きがいまいちよくわかりませんがFalseにするとロックしたセルも編集できました。(オブジェクトとグラフは編集不可のままっぽい)

サンプルコード(パスワード設定など)
Sub hogo()
    'アクティブシートの保護(パスワード指定、並び替え許可)
    ActiveSheet.Protect Password:="123", AllowSorting:=True
End Sub



シートの保護の解除

メソッドなど
Worksheet.Protect


サンプルコード(パスワード設定なし)
Sub hogokaijo()
    'アクティブシートの保護解除
    ActiveSheet.Unprotect
End Sub

パスワード設定がある場合は引数Passwordに指定します。
    ActiveSheet.Unprotect Password:="123"

関連・類似ページ
ブックの共有化
ブックの保存
警告や確認メッセージを非表示にする

VBA セルをダブルクリックしたらイベントを実行する




ステートメント構文など
Worksheet_BeforeDoubleClick

VBAを使ってエクセル上でセルをダブルクリックしたら何かしらVBAで処理をする方法です。
コードを記述する場所は[Microsoft Excel Objects]の中の実行したいワークシート(Sheet1(Sheet1))などです。


サンプルコード
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    'セルのA2:A5の範囲がダブルクリックされた時を対象
    If Not Intersect(Target, Range("A2:A5")) Is Nothing Then
        '処理例~~
        Cells(Target.Row, 2).Select
        MsgBox (Cells(Target.Row, 3))
    End If

End Sub



実行結果イメージ(セルA3をダブルクリックしています)


解説
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
セルをダブルクリックしたときに発生するイベントです。
クリックしたセルが引数[Target]となります。

If Not Intersect(Target, Range("A2:A5")) Is Nothing Then
Range("A2:A5")の範囲の場合を対象として処理をしようとしています。
Intersectは「横切る」の意味で「指定した範囲ではなくない場合ならば」という2重否定になっています。


引数[Target]にはクリックした行や列の情報が入っているので
Target.Row
で行番号が
Target.Column
で列番号が取得できます。


Cells(Target.Row, 2).Select
は一応クリックしたセルが編集モードにならないように隣のセルを選択しています。


関連・類似ページ
プロシージャを呼び出す

関連にある「Callステートメント」と併用することで色々と用途の幅は広がると思います。

VBA ヘッダーフッターの編集




ステートメント構文など
Worksheets.PageSetup.ヘッダーフッター

印刷時に反映するヘッダーとフッターを編集する方法についてです。
ヘッダー、フッターのフォントの変更や表示する文字などが出来ます。



オブジェクトメンバー(編集場所)
名前 説明
LeftHeader 左ヘッダー
CenterHeader 真ん中のヘッダー
RightHeader 右のヘッダー
LeftFooter 左のフッター
CenterFooter 真ん中のフッター
RightFooter 右のフッター


指定できる書式コード
名前 説明
&L このコードに続く文字列を左詰めに配置
&C このコードに続く文字列を中央揃えに配置
&R このコードに続く文字列を右詰めに配置
&X 上付き文字を印刷
&Y 下付き文字を印刷
&B 太字
&I 斜体
&U 下線(アンダーライン)
&S 取り消し線
&"フォント名" 指定したフォントに変更
(フォント名は半角の二重引用符 (") で囲む)
&nn(数字) 指定したフォントサイズに変更
(nnはポイント数を表す2桁の数値)
&color 色の変更(Kの後に16進数で指定)
&"+" 現在のテーマの[見出し]フォント
&"-" 現在のテーマの[本文]フォント
&D 現在の日付
&T 現在時刻
&F ファイル名
&A シート名
&P ページ番号
&P+<数値> ページ番号に指定した<数値>を足した値
&P-<数値> ページ番号から指定した<数値>を引いた値
&N 全ページ数
&& アンド(&)文字
&Z ファイルパス


サンプルコード
Sub headfoot()
    With ActiveSheet.PageSetup
        'ファイル名を太字
        .LeftHeader = "&B&F"
        '下線+指定文字列
        .CenterHeader = "&U" & "タイトルとか"
        '今日の日付をMeiryo UI、サイズ12
        .RightHeader = "&""Meiryo UI""&12 " & Date
            '注 フォント指定の次に半角数字がくる場合は半スペース空ける
                
        'シート名を赤字
        .LeftFooter = "&Kff0000&A"
            '注 色はKの後に16進数の色コード
        '現在時刻
        .CenterFooter = "&T"
        'ページ番号/全ページ数
        .RightFooter = "&P" & "/" & "&N"
        
    End With
End Sub


実行結果イメージ

関連・類似ページ
印刷範囲の設定
印刷を一枚に納める

PageSetupオブジェクトは印刷設定に関するプロパティがいろいろ含まれています

VBA ワークシートの非表示と表示




ステートメント構文など
Worksheets.Visible = False

ワークシートの非表示、表示をコントロールするプロパティです。
Worksheets.Visible = Falseで非表示に
Worksheets.Visible = Trueで表示に出来ます。

Excel2007以降ではプロパティが追加されており、エクセル上では表示に出来ないパターンでの非表示化が出来るようになりました。

XlSheetVisibility 列挙
名前 説明
True 表示する
False 非表示にする
xlSheetHidden 0 Trueと同じ
xlSheetVeryHidden 2 エクセル上では表示に変更できないように非表示にする
xlSheetVisible -1 Falseと同じ


サンプルコード
Sub wsv()
    'Sheet1を表示に変更
    Worksheets("Sheet1").Visible = True
    
    'Sheet1を非表示に変更
    Worksheets("Sheet1").Visible = False
    
    'Sheet1を非表示に変更
    Worksheets("Sheet1").Visible = xlSheetHidden
    
     'Sheet1を表示に変更
    Worksheets("Sheet1").Visible = xlSheetVisible

     'エクセル上では変更出来ない非表示状態
    Worksheets("Sheet1").Visible = xlSheetVeryHidden
    
End Sub


xlSheetVeryHiddenで非表示にした場合はエクセル画面下のシートタブ上で右クリックしても表示する選択が出てきません。VBAで[Visible = True]もしくは[Visible = xlSheetVisible]が実行された場合のみ表示されます。


VBA ワークシートの追加



メソッド構文など
VBAでワークシートを追加する方法の解説とサンプルコードなどです。
エクセルのショートカットだと[Shift]+[F11]と同様ですが、VBAだと追加する位置や数などを指定できます。
Worksheets.Add(Before, After, Count, Type)メソッドです。

追加したシートはActiveSheetになります。

名前 説明 既定値
Before 指定したシートの前に追加する Before:=Worksheets(1)
After 指定したシートの後に追加する After:=Worksheets(1)
Count 追加するシート数 1 Count:=2
Type ワークシートの種類(XlSheetType) xlWorksheet Type:=xlWorksheet
引数一覧
※全ての引数は省略可能です。(アクティブシートの前に1シート追加)


サンプル
Sub wsa()
    'Sheet1の前に1シート追加
    Worksheets.Add before:=Worksheets(1)
    
End Sub

一番後ろのシートに追加するにはWorksheets.Countプロパティを使用します。
Sub wsa()
    '一番後ろのワークシートに追加
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    
End Sub



関連ページ
新しいブック Workbooks.Addメソッド