アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルのロックについてですが
A2セルに日付を入力するとB2~B32にその月の日付が
自動で入るようになっています。
A3のセルにも日付を入力します。この日付は一回入力したら固定です。

日付隣のC2~C32のセルに文字を入力するのですが
A3に入力した日付以前の日付のC列に文字を入力できないようセルをロックしたいのですが
うまくいきません。

A2の日付がA3の日付より前の月であればC2~C32を全てロック出来れば最高です。
どなたか詳しい方教えて頂けると有難いです。
よろしくお願いいたします。

質問者からの補足コメント

  • 説明がわかりづらくすみません。
    大体の内容はこのコードでクリアできているのですが
    >A2の日付がA3の日付より前の月であればC2~C32を全てロック出来れば
    というのはA3は固定なのですがA2の日付は月ごとに変更するようになっていて
    その月がA3の日付以降であればC2~C32は全てロック解除でA3の日付以前であれば全てロックできるようにしたいのです。
    返信も遅れ、説明もわかりづらいですが何卒宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/10 11:52
  • ご回答ありがとうございますm(__)m
    返事が遅くなりすみません。

    このコードでほとんどやりたいことは出来ているのですが
    何回か保護中のセルをクリックしたりしていると
    なぜか保護が解けて選択出来てしまいます。
    なぜでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/02/14 17:31
  • うーん・・・

    例えばですが
    A2 2021/1/1
    A3 2021/1/15

    B2~b32 2021/1/1~2021/1/31
    C2~C32 全て空欄

    A3,C2~C16は保護されていますが
    保護されていないセルを選択し文字を入力出来る様
    点滅する棒のようなものを出した後
    保護中のセルを選択し文字入力を出来る様にクリックすると
    B2~B32のセルにエラーのマークが出てC2~C16が選択できるようになってしまいます。

    すみませんよろしくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/02/15 11:55
  • この様なエラーが出るとは思わず度々説明不足になってしまい申し訳ありません。
    B2は
    =DATE(YEAR(A2),MONTH(A2),1)
    となっておりB3~B32までは一つ上のセル+1となってます。
    例:B3であれば=B3+1
    それ以外数式は入っていません。
    よろしくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/02/15 15:22

A 回答 (5件)

No.4です。



>B2は
>=DATE(YEAR(A2),MONTH(A2),1)
>となっておりB3~B32までは一つ上のセル+1となってます。

ということで同条件でテストしてみましたが、やはり、ご質問者が示されたような症状は再現できませんでした。

ご質問者のEXCELブックが動作している全容が把握できませんが、今回、ご質問され、私が回答した、
「C2~C32の条件合致セルをロックするVBA」が動作しているVBAの全てなのでしょうか?

それとも、それはあくまでも全体のVBAの一部で、他のVBAもこのブックで動作しているのでしょうか?

当然のことながら、こちらのテストはあくまでも、私が回答した、「C2~C32の条件合致セルをロックするVBA」が単独で動作している前提でしかテストできません。

もし、他のVBAも動作しているとするとそちらとバッティングしている可能性は否定できませんが、内容が不明である以上回答困難です。
    • good
    • 0

No.3です。


大変申し訳ありませんが、ご質問者がコメントで例示されたような症状は再現できませんでした。

>B2~B32のセルにエラーのマークが出てC2~C16が選択できるようになってしまいます。

そもそもB2~B32はご質問者が設定された数式で表示されていると承知していますが、そこにエラーマークが出るということは、記述された数式や書式に不整合が生じているのかもしれません。

今回のコメントにはB2~B32の数式については一切説明がありませんが、B2~B32の数式と書式について教えてください。
この回答への補足あり
    • good
    • 0

No.2です。


>何回か保護中のセルをクリックしたりしていると
>なぜか保護が解けて選択出来てしまいます。
とのことですが、その状況を再現できません。

具体的にA2,A3,B2~B32がどんな値のとき、保護中のセルであるA3はまたC2~C32の、どのセルをクリックしているとその症状が出るのか教えてください。
なお、保存されたブックを開いたときは、すべてのロックが解除された状態になります。
この回答への補足あり
    • good
    • 0

ご質問者のコメントを見て、fujillinさんのコードを若干修正しました。

fujillinさん流用をお許し願います。
>A3に入力した日付「以前」の日付のC列に文字を入力できないよう
という説明ですので、fujillinさんのコードはC2~C32の値がA3と等しいときは入力可ですが、等しいときは入力不可にしました。
また、A2を変更するとC2~C32のロックセルも変更されるようにしました。
対象ブックのモジュールに以下のコードをコピペし、

Private Sub Workbook_Open()
ActiveSheet.Unprotect
End Sub

さらに、対象シートのシートモジュールに以下のコードをコピペして使用します。
「不要なら削除」の行は、ご質問者が
>A3のセルにも日付を入力します。この日付は一回入力したら固定です。
とおっしゃっているので、入力されたら変更不可にしています。(つまり、誤って入力しても修正できません。シートの保護を解除する必要があります。)
不要なら、その行を削除して使用してください。
なお、fujillinさんの注釈のとおり、保護パスワード無しの状態です。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim date0
Dim cel
If Intersect(Target, Range("A2:A3")) Is Nothing Then Exit Sub
Cells.Locked = False
date0 = Range("A3").Value
For Each cel In Range("B2:B32")
cel.Offset(0, 1).Locked = (cel.Value <= date0)
Next cel
If Range("A3").Value <> "" Then Range("A3").Locked = True '不要なら削除
ActiveSheet.Protect Contents:=True, UserInterfaceOnly:=True
End Sub
この回答への補足あり
    • good
    • 0

こんばんは



内容がよくわかりませんが、「ロックしたい」というのはシートの保護を利用したロックで良いものと解釈しました。
>うまくいきません。
としか情報がないので、どのような状態から処理をしたいのかまったくわかりませんが、A3セルに入力したら無条件でロックするものと仮定しました。
違っている場合は、スルーしてください。

以下のマクロを、対象シートのシートモジュールにコピペしておきます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim d, c
If Intersect(Target, Range("A3")) Is Nothing Then Exit Sub
Cells.Locked = False
d = Range("A3").Value
Cells(3, 1).Locked = True
For Each c In Range("B2:B32")
c.Offset(, 1).Locked = c.Value < d
Next c
ActiveSheet.Protect Contents:=True, UserInterfaceOnly:=True
End Sub

※ 保護にパスワードをかけてはありませんが、パスワードが必要な場合は追加してください。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!