Excel VBA質問箱 IV

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

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


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

【75012】入力規則を自動的に設定したい まき 13/11/14(木) 17:01 質問[未読]
【75017】Re:入力規則を自動的に設定したい まき 13/11/14(木) 23:15 発言[未読]
【75027】Re:入力規則を自動的に設定したい γ 13/11/15(金) 20:36 発言[未読]
【75033】Re:入力規則を自動的に設定したい γ 13/11/16(土) 20:08 発言[未読]
【75030】Re:入力規則を自動的に設定したい kuro 13/11/16(土) 14:12 発言[未読]
【75041】Re:入力規則を自動的に設定したい まき 13/11/18(月) 9:30 お礼[未読]

【75012】入力規則を自動的に設定したい
質問  まき  - 13/11/14(木) 17:01 -

引用なし
パスワード
   こんにちは
コードがうまく動かないのでご教示願います

[やりたいこと]
E列の指定された範囲に、○○○という文字列を含む文が入力されたら 同じ行のH列にデータの入力規則が設定されるようにしたい

シートモジュールに以下のコードを書いています

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim c As Object

For Each c In Range("$E23:$E60")
  
 If c.Value Like "*○○○*" Then
      x = ActiveCell.Row
      Cells(x, 9).Select
     MsgBox x
  With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=$X:$X"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .IMEMode = xlIMEModeNoControl
    .ShowInput = True
    .ShowError = True
  End With
 Else
 Exit Sub
 End If
Next c
End Sub

するとまったく動きません。○○○という文字列を認識してないのでしょうか?
ちなみにelse Exitsubを省略すると、○○○が含まれていなくてもH列に入力規則が設定されてしまいます
どこがおかしいのでしょうか?

【75017】Re:入力規則を自動的に設定したい
発言  まき  - 13/11/14(木) 23:15 -

引用なし
パスワード
   >Cells(x, 9).Select
Cells(x,8).Select
の間違いです(H列なので)
すみません 

【75027】Re:入力規則を自動的に設定したい
発言  γ  - 13/11/15(金) 20:36 -

引用なし
パスワード
   >どこがおかしいのでしょうか?
それは、
> Else
> Exit Sub
> End If
○○○が含まれない場合、
Exit Subしているからです。

マクロを抜ける命令を実行しているのですから、
すぐにサヨナラするのは当然ですね。
> Else
> Exit Sub
の二行をとれば良いんじゃないですか?

【75030】Re:入力規則を自動的に設定したい
発言  kuro  - 13/11/16(土) 14:12 -

引用なし
パスワード
   ▼まき さん:
>こんにちは
>コードがうまく動かないのでご教示願います
>
>[やりたいこと]
>E列の指定された範囲に、○○○という文字列を含む文が入力されたら 同じ行のH列にデータの入力規則が設定されるようにしたい
>
>シートモジュールに以下のコードを書いています
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim c As Object
>
>For Each c In Range("$E23:$E60")
>  
> If c.Value Like "*○○○*" Then
>      x = ActiveCell.Row
>      Cells(x, 9).Select
>     MsgBox x
>  With Selection.Validation
>    .Delete
>    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
>    xlBetween, Formula1:="=$X:$X"
>    .IgnoreBlank = True
>    .InCellDropdown = True
>    .InputTitle = ""
>    .ErrorTitle = ""
>    .InputMessage = ""
>    .ErrorMessage = ""
>    .IMEMode = xlIMEModeNoControl
>    .ShowInput = True
>    .ShowError = True
>  End With
> Else
> Exit Sub
> End If
>Next c
>End Sub
>
>するとまったく動きません。○○○という文字列を認識してないのでしょうか?
>ちなみにelse Exitsubを省略すると、○○○が含まれていなくてもH列に入力規則が設定されてしまいます
>どこがおかしいのでしょうか?

今回提示されたプログラムではシートのどこかのセルで変化があったときE23〜E60
に"○○○"が含まれていることを上からチェックし処理するように見受けられますが,
処理したい行に行く前にExitSubで終了となる可能性がかなりあると思いますので,
変化したセル(Target)がE23〜E60のとき処理を実行するようにしてはいかがでしょうか?

【75033】Re:入力規則を自動的に設定したい
発言  γ  - 13/11/16(土) 20:08 -

引用なし
パスワード
   コードをあらためてよく拝見しました。
ご指摘のとおりですね。
こんな感じですか?

単一セルの変更時だけ実行することとしています。
なお、入力規則の内容は見ていません。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If Intersect(Target, Range("E23:E60")) Is Nothing Then Exit Sub
  If Target.Value Like "*○○○*" Then
    With Target.Offset(0, 3).Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:="=$X:$X"
      .IgnoreBlank = True
      .InCellDropdown = True
      .InputTitle = ""
      .ErrorTitle = ""
      .InputMessage = ""
      .ErrorMessage = ""
      .IMEMode = xlIMEModeNoControl
      .ShowInput = True
      .ShowError = True
    End With
  End If
End Sub

【75041】Re:入力規則を自動的に設定したい
お礼  まき  - 13/11/18(月) 9:30 -

引用なし
パスワード
   ▼kuro さん:
▼γ さん:
こんにちは
お礼が遅れて申し訳ありません
よくよく自分のコードを見直してみたらご指摘の通りで
教えていただいたコードを試してみたら
うまく動きました、ありがとうございました。

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