0

A1:B10 の範囲のセルがあるとします。A1 から A10 の範囲のセルには、2 つのオプション (lock、dont_lock) を持つドロップダウン リストが含まれています。B1 から B10 の範囲のセルは、ユーザーがデータを入力できる空のセルです。私がやりたいことは、隣接するセルの値に基づいて個々のセルをロックすることです。したがって、セルA1が「ロック」に設定されている場合、セルB1をロックします。IF セル A2 が「dont_lock」に設定されている場合、B2 はロックされません。以下のコードに示す for ループを使用しようとしましたが、機能しません。誰でも助けることができますか?

Dim rCell As Range
Dim rRng As Range

Set rRng = Sheet1.Range("A1:B10")

For Each rCell In rRng.Cells
    If rCell = "Lock" Then
    Range("B1").Locked = True

End If

Next rCell
4

2 に答える 2

4

Excel では、セルは既定でロックされています。セルのロックを解除したい場合は、実際にその動作を指定する必要があります。ただし、ワークシートが現在保護されていない場合、セルがロックされているかどうかは関係ありません。したがって、ロックされた動作が必要な場合は、必ず を呼び出してSheet1.Protectください。

私があなたの説明を正しく理解していれば、次のような方がうまくいくでしょう:

Dim rCell As Range
Dim rRng As Range

Set rRng = Sheet1.Range("A1:A10") 'Exclude B as you are only checking A.
Sheet1.Unprotect
For Each rCell In rRng.Cells
    'Avoid if else structure since locking depends on result of evaluation only.
    rcell.Offset(0,1).locked = rcell.Value = "Lock"
Next rCell
Sheet1.Protect
于 2012-12-18T16:02:20.183 に答える
1

次のコードを試してください。コードの唯一の問題は、rCell.value = "Lock" が欠落していることです。すべてのセルに対してセル B1 のみをロックしています。隣接するすべてのセルをロックしていません:)

**これはサンプルコードです**

Option Explicit

Sub lockNextCell()
Dim wkSheet As Worksheet
Dim rng As Range, rCell As Range

Set wkSheet = Sheets("Sheets1") '-- use your own sheet
Set rng = wkSheet.Range("A3:A12") '-- use your own range

For Each rCell In rng
    If rCell.Offset(0, 0).Value = "Lock" Then
        rCell.Offset(0, 1).Locked = True '-- here we are locking the adjacent cell
    else
        rCell.Offset(0, 1).Locked = False
    End If
Next rCell

End Sub

ダニエルがシートの保護について話しているときのメモ:

MSDN からの参照は次のとおりです。「セルをロックしてワークシートを保護すると、セルにデータを入力したり、現在セルにあるデータを変更したり、セルの他の属性 (セルの書式設定など) を変更したりすることはできません」

于 2012-12-18T15:58:41.113 に答える