- 締切済み
EXCEL入力規則選択 → 文字表示 or 入力可
EXCEL2003で表を作成しています。 B列に入力規則を使い、「イ」または「ロ」が選べるようにリストを作ってあります。 B列(B3)のセルで 「イ」 を選ぶと、D列(D3)には「A」、E列(E3)には「0000」、F列「-」を表示させるようにし、B列(B3)のセルに 「ロ」 を選ぶと、D列(D3)、E列(E3)、F列(F3)に任意の文字を入力できるようにしたいのです。 以下、B4、B5、、、、と続いていっても、D4、E4、F4. D5、E5、F5・・・と対応していくような表にしたいのです。 関数でも、マクロでも何でもかまいません。できるだけ、簡単な方法を教えていただければと思います。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
条件付きのドロップダウンリストを設定し、その中の候補を選んで入力してもらうという手もあります。B列が「イ」のときはリスト中に入力データの候補が現れ、それ以外のときは候補が現れないようにします。 質問者さんは既にB列にリストを作ってあるとのことですが、D、E、F列にもそれぞれリストを設定します。H1セルに「A」が入力され、H2は未入力であるとき、カーソルをD3セルに置いた状態で、リストの「元の値」に次の式を入力します。 =if(b3="イ",$H$1,$H$2) 注意点は、ここに書いてあるとおりの式を使うことです。条件付き「書式」ではかなりいろいろな数式を設定できますが、残念ながら、条件付きの「リスト」では、式の内容について制約が大きいです。ちょっと書き方を変えると「「元の値」の設定時」にすぐエラーになりますので、注意してください。また、エラーが出る場合でも、B3セルに「イ」が入力されていれば出なかったりすることもあったり…簡単ですが難しいのです。
- kybo
- ベストアンサー率53% (349/647)
マクロの場合、シートの見出しで右クリック→コード表示で以下を貼り付け Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B3:B100")) Is Nothing Then Select Case Target.Resize(1, 1).Value Case "イ" Target.Offset(, 1).Value = "A" Target.Offset(, 2).NumberFormatLocal = "0000" Target.Offset(, 2).Value = "0000" Target.Offset(, 3).Value = "-" Case "ロ" Target.Offset(, 1).Resize(, 3).ClearContents End Select End If End Sub 関数が消えてもいいなら、以下の様にすればいいです。 以下の様にし、「ロ」の時は、数式を無視してセルに入力すればいいです。 C3 =IF($B3="イ","A","") D3 =IF($B3="イ","0000","") E3 =IF($B3="イ","-","")
補足
ありがとうございます。 book1で作成してばっちり動きました!! すばらしくて感動しました。完璧な答えをありがとうございます! 実は、頼まれた次の日に、どんどん要望が出てしまいました++ お礼や補足が1度しか出来ないので、時間をおくしかありませんでした。すみません。 (1) 行の使い方が2行で1セットになり、一部分のセル以外は、セルの結合をしています。そのため、Resizeのところで、つまづくようになってしまいました。Resizeはどういう理由で使う必要があるのでしょうか? (2) ClearContentsも2行のためか、どうしても上手くいかなかったので、さまざま試した結果、Target.Offset(, 1).Value = ""を使いました。これの問題点はありますか? (3) Target.Offset(, 1).Value = "A"とかですが、できれば、他の入力はできないようにしたいそうなんですが、そこまで強制的なことはできますか? (4) 行の挿入と削除だけは許したいということなのですが、シートの保護をかけた時に、挿入・削除を許すように、チェックをしても、実際に挿入しようとすると、マクロがデバック表示をしてきます。どうやって、設定したらいいでしょうか? 本当にいろいろ聞いてしまってすみません。よろしくお願いします。