『入力規則とIF?』(むつ) B列に入力規則が設定されています。 A列に「不」か「未」いずれかが入力されたら、B列に「ハイフン(-)」を表示させたいのです。 B列は「ハイフン」以外にも、入力規則にて入力可能な文字があるので、セルに数式を 入れられません。どうしたらよいのでしょうか。 お願いいたします。 ---- A列には「不」か「未」以外に何が入るのでしょうか。 たとえばB列にはあらかじめ仮にB2=IF(A2="","",IF(OR(A2="不",A2="未"),"-","")) というように式を入れておいても入力規則を後から選ぶことも可能だと思うのですが・・・。 入力規則で選んでしまうと数式が消えてしまうことがだめなのでしょうが・・・。 どのように使用したいのかもう少し詳しく説明してくださればレスもつきやすくなると思いますよ。 (肌) ---- 併用はできません  入力規則で選んでしまうと数式が消えてしまう 当たり前    (当たり前) ---- 肌さん、ありがとうござます。 説明不足ですみません。 A列へ入力する文字は、入力規則で特定されていますが、20以上種類があります。 B列に関しててですが仰るとおり、入力規則で選んでしまうと数式が消えてしまう ので、困っています。 当たり前さん、当たり前な質問で申し訳ありません・・・(恥) 他の方法はあるのでしょうか。 改めまして、よろしくお願いいたします。 (むつ) ---- [[20060515112902]] なんて参考になると思いますが (肌) ---- こんな感じでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Column <> 1 Or .Value = "" Or .Count <> 1 Then Exit Sub Application.EnableEvents = False If .Value = "不" Or .Value = "未" Then Cells(.Row, 2).Value = "-" End With Application.EnableEvents = True End Sub (川野鮎太郎) ---- 川野鮎太郎さん、ありがとうございます。 思っていたものが出来あがりました。 しかし、ひとつエラーが出てしまいます。 二つ以上のセル入力文字を削除すると、エラー13(デバック)が出ます。 なぜでしょうか。(むつ) ---- 二つ以上のセルをいじっちゃ(;`O´)oダメ〜!! そんな操作があるなら、こっちにしてみてください(^_^A; Private Sub Worksheet_Change(ByVal Target As Range) Dim C As Range With Target If .Column <> 1 Or .Columns.Count <> 1 Then Exit Sub Application.EnableEvents = False For Each C In Selection If C.Value = "" Then Cells(C.Row, 2).Value = "" If C.Value = "不" Or C.Value = "未" Then Cells(C.Row, 2).Value = "-" Next C End With Application.EnableEvents = True End Sub 一度エラーが出たら、イベントが発生しないかもしれないので、 標準モジュールで一回実行してください。 Sub 回復() Application.EnableEvents = True End Sub (川野鮎太郎) ---- 川野鮎太郎さん、たびたびありがとうございました。 無事完成いたしました。 ずうずうしくも、もうひとつ教えてください。 シートモジュールの場合、「Ctrl+Z」等、1つ前へ戻る事は不可なのでしょうか。 (むつ) ---- 無理・・・_/ ̄|○ il||li (川野鮎太郎) ---- 色々ありがとうございました。 戻る機能はほとんど使わないと思うのですが、複数の人間が使うので 予防線を張っておこうと思い、お聞きしました。 本当にありがとうございました。 (むつ) ---- おひさしぶりです。むつです。 上記のマクロを応用し利用していましたが、バグ(?)がおきているようです。 解決方法を教えてください。 ↓D列に入力をすると、M・O・P列に入力されているデータが消えてしまいます。 ----- Private Sub Worksheet_Change(ByVal Target As Range) Dim C As Range With Target If .Column > 12 Or .Columns.Count > 12 Then Exit Sub Application.EnableEvents = False For Each C In Selection If C.Value = "" Then Cells(C.Row, 13).Value = "" If C.Value = "不可" Or C.Value = "倒産" Then Cells(C.Row, 13).Value = "-" If C.Value = "" Then Cells(C.Row, 15).Value = "" If C.Value = "不可" Or C.Value = "倒産" Then Cells(C.Row, 15).Value = "-" If C.Value = "" Then Cells(C.Row, 16).Value = "" If C.Value = "不可" Or C.Value = "倒産" Then Cells(C.Row, 16).Value = "-" Next C End With Application.EnableEvents = True End Sub ---- どの列に入力したいときに処理したいのでしょうか。 If .Column > 12 Or .Columns.Count > 12 Then Exit Sub このあたりを調整すれば良いのじゃないかなぁ。 (川野鮎太郎) ---- 川野鮎太郎さんありがとうございます。 M列入力時に処理したいのです。 「If C.Value = "" Then Cells(C.Row, 13).Value = ""」(15、16も同様)に ’ を付け 非アクティブにしたら解消されました。 M列に「不可」「倒産」いずれかを入力した場合のみ処理すればよいのですが、この解消方法 で大丈夫でしょうか。 (むつ) ---- 上で書いたように > If .Column > 12 Or .Columns.Count > 12 Then Exit Sub これを直して、 If .Column <> 13 Or .Columns.Count <> 1 Then Exit Sub で良いのではないですか。 (川野鮎太郎) ---- 早速の回答ありがとうございます。 ご提案いただいた通りで、解消いたしました。 お手数をおかけいたしました。 バグと勘違いをしたくらいですので、 If .Column <> 13 Or .Columns.Count <> 1 Then Exit Sub の意味が分かっておりません。 よろしければお教えいただけませんでしょうか。(むつ) ---- イフ、列が13じゃなかった場合、または、列の数が1じゃなかった場合は、Subを出る ですから、もし、入力した列がM列以外または、複数の列を処理しようとした場合、 コードを抜けてマクロ処理をしないってことです。 (川野鮎太郎) ---- 分かり易い解説ありがとうございました。 大変勉強になりました。 今後ともよろしくお願いいたします。(むつ)