• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBA 二つのセルに入力された時の判定)

ExcelVBAで二つのセルに入力された時の判定

このQ&Aのポイント
  • ExcelVBAを使用して、セルA1とA2の両方に値が入力された場合に、セルA3に文字を入力するマクロを作成したいです。
  • 現在のプログラムでは、最初のIF文で常にTrueになってしまいます。この条件を満たすマクロの作り方を教えてください。
  • リリースするマクロのために、ExcelVBAを使ってセルA1とA2が入力された場合にセルA3に文字を入力する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

このようなセルへの入力を制御するロジックは結構作りました。 質問に関して、必要なことを考えてみました。(不必要かも) (1)A1、A2セルの2つとも何らかの入力があれば、   A3に「入力済み」と表示(質問の主旨) (2)ユーザー(Excel操作者)がA3セルを操作できない。(私の考える追加機能) (3)A1、A2セルの2つともに何らかの入力をしA3に「入力済み」と表示   された後、A1またはA2セルを消去したら、A3セルの「入力済み」を   クリアする。(私の考える追加機能) ※昔、検証者がこのようなことを指摘してくれました。善意の検証と悪意の検証ですね。悪意の方が何倍も助かりました。対象シートは「Sheet1」としています。 (2)への対応  対象シートのセルを全て選択し、  ・右クリック>セルの書式設定>保護タブ>ロックのチェックを外します。  ・A3セルを選択し、右クリック>セルの書式設定>保護タブ>ロックを   チェックします。  ・校閲タブ>シートの保護を実行します。  これで、対象シートは、A3セルにユーザーからは入力できなくなります。 (1)への対応  「(2)への対応」を行ったので、質問にある   「Range("A3").Value = "入力済み"」ができなくなります。当然ですね。  これを回避するために、ProtectメソッドのUserinterfaceOnlyオプションを  使います。保護をユーザの手動シート操作に対してのみ有効にし、マクロ  からは無効にしてくれます。マクロからは変更できるわけです。 ThisWorkbookのコードペインに次を貼り付けます。 Book起動時に有効になります。 Private Sub Workbook_Open()  With Worksheets("Sheet1")   .Unprotect   '// シート保護を解除   .Protect UserInterfaceOnly:=True '// シート保護を設定(UIのみ)  End With End Sub (3)への対応 質問のコードは、動いたとしても、「入力済み」と表示された後、A1、A2セルに変更(クリア)がある場合、何もしません。2セルともに入力されていない場合の処理を書くべきでしょう。 Private Sub Worksheet_Change(ByVal Target As Range)  If Not (Intersect(Target, Range("A1,A2")) Is Nothing) Then   If Range("A1").Value <> "" And Range("A2").Value <> "" Then    Range("A3").Value = "入力済み"   Else    Range("A3").Value = ""   End If  End If End Sub

Nabco0925
質問者

お礼

ご丁寧にご解説して頂きありがとうございます。 とても参考になりました、記述して頂いたコードを使用させて頂きます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

No1 の追加です。 もし、セルが離れていた場合や沢山ある場合にはAndで繋ぐより If Intersect(Target, Range("A1,A2")) Is Nothing Then みたいにした方が見やすいですね。

Nabco0925
質問者

お礼

そんな簡単なことで良かったのですね...。Intersectメソッドについてまだまだ勉強不足でした。 ご回答頂きありがとうございます。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

No1の他に、連続している場合は If Intersect(Target, Range("A1:A2")) Is Nothing Then なども使えます。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

If Intersect(Target, Range("A1")) Is Nothing And Intersect(Target, Range("A2")) Is Nothing Then にしてください。A1でもA2でもない場合。