Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2010)
行のロックと色つけ
投稿日時: 18/02/24 19:12:49
投稿者: m024240

住所録を作っていて
 
  A   B   C  D   E  …
1  L  名前  〒  住所  電話  …
2
 
このようなデータにしようと思っています。
 
質問1
ここで、A列(L)に例えば「1」を入れた場合、その行をロックしたいと考えているのですが、
可能でしょうか?
 
質問2
ロックのかかっているセルに色を付け、
ロックのかかっていないセルを白(背景のまま)にすることは可能でしょうか?
 
よろしくおねがいします。

回答
投稿日時: 18/02/24 21:00:41
投稿者: WinArrow
投稿者のウェブサイトに移動

1つ目
まず
>ロックする
という関数はないと思います・・・・・
 
 
2つ目
>ロックされているセルを参照する関数もないと思います。
 
対応策としては、
VBAになると思います。
 
 
 

回答
投稿日時: 18/02/24 21:04:42
投稿者: WinArrow
投稿者のウェブサイトに移動

追加情報です。
 
セル(行)をロックする目的は?
若し、セルの更新を制御したいということならば、
セル(行も同じ)をロックしただけでは、
その目的は実現できず、シートを保護する必要があります。
 

回答
投稿日時: 18/02/24 21:29:56
投稿者: WinArrow
投稿者のウェブサイトに移動

質問1では、
関数で対応したいとは、書かれていないので
手操作ならば、
対象行を選択しておいて
セルの書式設定ダイアログで、「保護」タブの中の「ロック」にチェックを入れればよい。
しかし、前提としては、最初に対象範囲(全セル?)をロックを外しておく必要があります。
 
でもね・・・
セルをロックする目的が、そのセルを更新されたくない・・・ということでしたら、
シートを保護する必要があります。
 
最初からシートを保護しておいて、
後から条件によって、ロックを掛けることはできません。
 

回答
投稿日時: 18/02/24 21:31:48
投稿者: Mike

m024240 さんの引用:
ここで、A列(L)に例えば「1」を入れた場合、その行をロックしたい…
ということは、当該行の全セルを書き込み禁止にしたいと?
Ctrl+1 ⇒ [保護]を眺めてください。
“ロック”にチェックが入っているでしょ?つまりワークシートの全セルは“ロック”状態なのです。既にロック状態だけど、シートを保護しない限りそれが有効になりません。
貴方の場合は、「その行」以外の全セルのロックを外してから、シートを保護することになります。
 
然し乍ら、A列に「1」を入れた場合にのみ、ロックを外したり、シート保護したりの機能は、マクロに頼らない限り不可能、というのが私の理解です。
 
貴方自身はマクロの素養はありますか?

回答
投稿日時: 18/02/25 16:56:29
投稿者: んなっと

質問2
  
条件付き書式 次の数式〜
=CELL("protect",A1)
   
質問1
  
管理者:
1.シートの保護を解除
2.A列が1ならロック、空白ならロックを外す
3.シートの保護をかける
 データを入力する人:
4.ロックされていないレコードのみ変更可能
  
1.〜3.の作業が週に1回なら手作業でも我慢できるが、
 毎日となると面倒、といった状況でしょうか。
  
VBAの例です。
ただし4.の作業が不自由になるかもしれません。
 
Sub test()
  Dim r As Range
  Application.ScreenUpdating = False
  With ActiveSheet
    .Unprotect
    .Cells.Locked = False
    With .UsedRange
      .AutoFilter Field:=1, Criteria1:="<>"
      On Error Resume Next
      Set r = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
      On Error GoTo 0
      If Not r Is Nothing Then
        r.Locked = True
      End If
      .AutoFilter
    End With
    .Protect AllowInsertingRows:=True, AllowDeletingRows:=True
  End With
  Application.ScreenUpdating = True
End Sub

回答
投稿日時: 18/02/25 21:33:59
投稿者: ただやん

質問1
下記の手順で可能です。
1. すべてのセルのロックを解除する。(セルの書式設定)
2. 下記のコードを対象シートのモジュールにコピー&貼り付け。
(Alt+F11でコードエディタを表示→対象シート名を右クリックし「コードの表示」をクリック→貼り付け)
Private Sub Worksheet_Change(ByVal Target As Range)
    ' A列のセルが変更された場合、以下を実行
    If Target.Count <> 1 Or Target.Column <> 1 Then Exit Sub
    ' シートの保護を解除
    ActiveSheet.Unprotect
    ' 変更されたA列のセルの値が1であれば、B列以降をロック(1以外であればロックを解除)
    Range("B" & Target.Row & ":XFD" & Target.Row).Locked = (Target.Value = 1)
    ' シートを保護
    ActiveSheet.Protect AllowInsertingRows:=True, AllowDeletingRows:=True
End Sub
 
質問2
んなっと さんの回答の通りで可能です。
※上記質問1の手順を実行する前に、質問2(条件付き書式の設定)を済ませて下さい。
 

投稿日時: 18/02/26 00:07:25
投稿者: m024240

すいません、体調不良で伏せているうちに
たくさんの方々からコメントをいただいておりました。
 
まだまだ、ぼんやりしているので、いろいろ試しておりませんが、
ありがとうございました、
 
一端、閉じさせていただきます。