Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2426 / 13646 ツリー ←次へ | 前へ→

【68095】結合セルの保護を全てのシートに反映させる 紗織 11/2/1(火) 10:48 質問[未読]
【68096】Re:結合セルの保護を全てのシートに反映さ... UO3 11/2/1(火) 11:32 発言[未読]
【68097】Re:結合セルの保護を全てのシートに反映さ... 紗織 11/2/1(火) 11:45 発言[未読]
【68098】Re:結合セルの保護を全てのシートに反映さ... UO3 11/2/1(火) 11:57 回答[未読]
【68101】Re:結合セルの保護を全てのシートに反映さ... 紗織 11/2/1(火) 13:29 発言[未読]
【68103】Re:結合セルの保護を全てのシートに反映さ... UO3 11/2/1(火) 13:43 発言[未読]
【68104】Re:結合セルの保護を全てのシートに反映さ... 紗織 11/2/1(火) 14:02 お礼[未読]

【68095】結合セルの保護を全てのシートに反映させ...
質問  紗織  - 11/2/1(火) 10:48 -

引用なし
パスワード
   題名の通り、結合セルの保護を全てのシートに反映させたいのですが
どこを修正したら良いのでしょうか。
また、範囲指定(例 B1:B10)をしたい場合どのようなコードを
入力したらいいのか教えて頂けますでしょうか。
※範囲指定には結合セルが含まれます。

<行いたい処理>
Sub 保護()
  ActiveSheet.Unprotect  ' シートの保護解除
  Cells.Locked = True ' すべてのセルのロックする
  Range("B13").MergeArea.Locked = False
  ActiveSheet.Protect ' シートの保護
  MsgBox "完了です"
End Sub

【68096】Re:結合セルの保護を全てのシートに反映...
発言  UO3  - 11/2/1(火) 11:32 -

引用なし
パスワード
   ▼紗織 さん:

おはようございます

理解力がどんどん落ちてきているせいでしょうが、ちょっと質問です。

1)以下のどちらですか?
 1.全てのシートの結合セル【だけを】保護し、そのほかのセルは非保護にする。
 2.全てのシートの結合セル【だけを】非保護にし、そのほかのセルは保護にする。
2)以下のいずれですか?
 1.上記1)を行った上で指定された範囲に対して【何かをする】
 2.全てのシートに対して指定範囲【だけに】上記1)のいずれかを行う。
3)上記2)が1.なら【何かをする】というのは何ですか?

【68097】Re:結合セルの保護を全てのシートに反映...
発言  紗織  - 11/2/1(火) 11:45 -

引用なし
パスワード
   ▼UO3 さん:
説明不足で申し訳ありません。

>1)以下のどちらですか?
> 1.全てのシートの結合セル【だけを】保護し、そのほかのセルは非保護にする。
> 2.全てのシートの結合セル【だけを】非保護にし、そのほかのセルは保護にする。
特定セルの保護したいので、結合セルの中でも保護するものと非保護にするものがあります。

>2)以下のいずれですか?
> 2.全てのシートに対して指定範囲【だけに】上記1)のいずれかを行う。
2番を行いたいです。
全てのシートは、同じフォーマットで作られており
その中の指定範囲のみ非保護として入力出来るようにしたいと思っています。

全セル保護→指定範囲非保護→全シート保護

これらは、マクロボタンを作成し
「複数のファイルに対して一括処理を行いたい」
と思っています。

【68098】Re:結合セルの保護を全てのシートに反映...
回答  UO3  - 11/2/1(火) 11:57 -

引用なし
パスワード
   ▼紗織 さん:

追加説明ありがとうございます。
まだ誤解していたら言ってください。

Sub Sample()
  Dim sh As Worksheet
  Dim c As Range
  For Each sh In Worksheets
    sh.Unprotect
    sh.Cells.Locked = False
    For Each c In sh.Range("B1:B10")
      If c.MergeCells Then
        If Split(c.MergeArea.Address, ":")(0) = c.Address Then _
                        c.MergeArea.Locked = True
      End If
    Next
    sh.Protect
  Next
  MsgBox "完了です"
End Sub

【68101】Re:結合セルの保護を全てのシートに反映...
発言  紗織  - 11/2/1(火) 13:29 -

引用なし
パスワード
   ▼UO3 さん:

ご回答ありがとうございます。
思い通りの結果になりました!!

1つ教えて頂きたいのですが
>For Each c In sh.Range("B1:B10")
で範囲を指定する時、複数の範囲を指定したい場合はどうしたら良いのでしょうか。

例)B1:B10
  X1:X10
  AB1   など

今までの範囲、別の範囲、個別のセルを指定する場合の方法を
教えていただけますでしょうか。

【68103】Re:結合セルの保護を全てのシートに反映...
発言  UO3  - 11/2/1(火) 13:43 -

引用なし
パスワード
   ▼紗織 さん:

こんにちは

複数の範囲の指定方法はいろいろありますが、代表的なものを2つ。
(Sample3はSample2の解説といった程度)
いずれも同じセル領域を取得しています。
こうして取得したrから
For Each c In r として、セルを取り出すことができますし、
シートごとに別の領域をrに与えることもできますね。

(答えになっていますでしょうか?)

Sub Sample1()
  Dim r As Range
  Set r = Range("A1:B3,A10:C12,D5:D8")
  MsgBox r.Address
End Sub

Sub Sample2()
  Dim r As Range
  Set r = Union(Range("A1:B3"), Range("A10:C12"), Range("D5:D8"))
  MsgBox r.Address
End Sub

Sub Sample3()
  Dim r As Range
  Set r = Range("A1:B3")
  Set r = Union(r, Range("A10:C12"))
  Set r = Union(r, Range("D5:D8"))
  MsgBox r.Address
End Sub

【68104】Re:結合セルの保護を全てのシートに反映...
お礼  紗織  - 11/2/1(火) 14:02 -

引用なし
パスワード
   ▼UO3 さん:

ご丁寧に教えて頂きありがとうございます。
UO3さんのコードを参考にマクロを作成します。

本当にありがとうございました。

2426 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free