Excel VBA質問箱 IV

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

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


558 / 13645 ツリー ←次へ | 前へ→

【79708】エラーメッセージ V 18/3/14(水) 10:38 質問[未読]
【79711】Re:エラーメッセージ りった 18/3/14(水) 12:43 回答[未読]
【79713】Re:エラーメッセージ V 18/3/14(水) 14:19 質問[未読]
【79719】Re:エラーメッセージ りった 18/3/15(木) 12:33 回答[未読]
【79720】Re:エラーメッセージ V 18/3/15(木) 13:13 質問[未読]
【79724】Re:エラーメッセージ りった 18/3/22(木) 12:49 回答[未読]

【79708】エラーメッセージ
質問  V  - 18/3/14(水) 10:38 -

引用なし
パスワード
   初心者でさっぱりわからないので教えて下さいませ。

Sheet1のA1からA41まで、大項目のデータの入力規則のリストになっています。
Sheet1のB1からB41まで、中項目のデータの入力規則のリストになっています。
Sheet1のC1からC41まで、小項目のデータの入力規則のリストになっています。
Sheet1のD1からE41まで、規格のデータの入力規則のリストになっています。
Sheet1のE1からE41までは、数量を入力するセルです。
Sheet1のF1からF41までは、金額を入力するセルです。

以降、Sheet1は省略させていただきます。
このときに、順々に

A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
「大項目を入力して下さい」とエラーメッセージがでるようにしたいです。

B1に値が入力されていないと、C1,D1,E1,F1は、入力できずに
「中項目を入力して下さい」とエラーメッセージがでるようにしたいです。

C1に値が入力されていないと、D1,E1,F1は、入力できずに
「小項目を入力して下さい」とエラーメッセージがでるようにしたいです。

D1に値が入力されていないと、E1,F1は、入力できずに
「規格を入力して下さい」とエラーメッセージがでるようにしたいです。
また、0以上で小数点第2位の数値でなければ「小数点第2位までの数値を入力して下さい」と
エラーメッセージがでるようにしたいです。
セルの書式設定で数値でも構いません。

E1に値が入力されていないと、F1は、入力できずに
「数量を入力して下さい」とエラーメッセージがでるようにしたいです。
また、0以上の正の整数でなければ「整数を入力して下さい」とエラーメッセージがでるようにしたいです。

2行目以降も同様にしたいです。

どなたかわかる方がおられましたら、
コードの提示をお願いしたいです。
説明が不足しているかもしれませんが、宜しくお願い致します。

【79711】Re:エラーメッセージ
回答  りった  - 18/3/14(水) 12:43 -

引用なし
パスワード
   # 下記は、Sheet1のマクロとして記載するイメージです。
Private Sub Worksheet_Change(ByVal Target As Range)
  ' A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  If Not Intersect(Target, Sheet1.Range("B1:F1")) Is Nothing Then
    If Sheet1.Range("A1") = "" Then
      MsgBox "大項目を入力して下さい"
    End If
  End If
End Sub

後は、ご自分で頑張ってください。
もし上記で分からないようでしたら再度質問を上げると誰かが回答してくれると思います。
どの部分が分からないかを整理して質問すると期待する回答が得やすいです。

【79713】Re:エラーメッセージ
質問  V  - 18/3/14(水) 14:19 -

引用なし
パスワード
   ▼りった さん:
># 下記は、Sheet1のマクロとして記載するイメージです。
>Private Sub Worksheet_Change(ByVal Target As Range)
>  ' A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
>  '「大項目を入力して下さい」とエラーメッセージがでるようにする
>  If Not Intersect(Target, Sheet1.Range("B1:F1")) Is Nothing Then
>    If Sheet1.Range("A1") = "" Then
>      MsgBox "大項目を入力して下さい"
>    End If
>  End If
>End Sub


ありがとうございます。
質問なのですが、これをA31まで適用するには
どこを変えればいいのでしょうか?

【79719】Re:エラーメッセージ
回答  りった  - 18/3/15(木) 12:33 -

引用なし
パスワード
   Targetが複数セルのことがあるので、for eachでループしてみるのは如何でしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Anに値が入力されていないとBn,Cn,Dn,En,Fnは、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  ' n:1〜41
  Dim r As Range
  For Each r In Target
    If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
      If Sheet1.Range("A" & r.Row) = "" Then
        MsgBox "大項目を入力して下さい"
      End If
    End If
  Next
End Sub

複数セルを一気に更新して大量にエラーが出るのが嫌であれば、ループから抜けてください。
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Anに値が入力されていないとBn,Cn,Dn,En,Fnは、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  ' n:1〜41
  Dim r As Range
  For Each r In Target
    If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
      If Sheet1.Range("A" & r.Row) = "" Then
        MsgBox "大項目を入力して下さい"
        Exit For ' ★
      End If
    End If
  Next
End Sub


無関係な広範囲のセルを更新時に大量にループするのが嫌であれば下記で
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Anに値が入力されていないとBn,Cn,Dn,En,Fnは、入力できずに
  '「大項目を入力して下さい」とエラーメッセージがでるようにする
  ' n:1〜41
  Dim r As Range
  If Not Intersect(Target, Sheet1.Range("B1:F41")) Is Nothing Then ' ★
    For Each r In Target
      If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
        If Sheet1.Range("A" & r.Row) = "" Then
          MsgBox "大項目を入力して下さい"
        End If
      End If
    Next
  End If
End Sub

【79720】Re:エラーメッセージ
質問  V  - 18/3/15(木) 13:13 -

引用なし
パスワード
   ▼りった さん:

返信ありがとうございます。
何回も質問ばかりして申し訳ないのですが、

3つのループの違いがいまいちわからないのですが
一番下の無関係な広範囲の・・・ものが
一番処理的には、良いのでしょうか?

また、下記のコードですが、

Private Sub Worksheet_Change(ByVal Target As Range)

' A1に値が入力されていないとB1,C1,D1,E1,F1は、入力できずに
'「大項目を入力して下さい」とエラーメッセージがでるようにする
' n:1〜41
  
  Dim r As Range
 
  If Not Intersect(Target, Sheet1.Range("B1:F41")) Is Nothing Then ' ★
  
   For Each r In Target
    If Not Intersect(r, Sheet1.Range("B1:F41")) Is Nothing Then
     If Sheet1.Range("A" & r.Row) = "" Then
     
      Application.EnableEvents = False
      Target.Value = ""
      Application.EnableEvents = True
      
      MsgBox "大項目を入力して下さい", Title:="入力エラー!", Buttons:=vbCritical + vbRetryCancel
 
     End If
    End If
   Next
  End If
End Sub

キャンセルの場合は、値が消えるようにしてみたのですが
一応動いているみたいですが、こんな感じで間違ってないでしょうか?

【79724】Re:エラーメッセージ
回答  りった  - 18/3/22(木) 12:49 -

引用なし
パスワード
   気付くの遅れました済みません。
動いているとのことですし、だれも指摘しないので、大丈夫だと思います。

iEnEv = Application.EnableEvents
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = iEnEv

とした方がお行儀いいかもしれません。
ただ、ここら辺は私もやったことがないので、よくわかりません。

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