[[20180313114622]] 『リストボックス』(LT) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『リストボックス』(LT)

A1からA3にデータがあり、A列と名前を定義しています。
B1からB3にデータがあり、B列と名前を定義しています。

C1に入力規則のリストで=A列としております。

D1に入力規則のリストで=B列としたいのですが
C1にデータが入力されていないと、エラーとなり
入力ができないようにできますでしょうか?

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 エラーにはならないが。
 まずC1セルに値を入力した状態でD1セルに入力規則のリストで元の値に
 =IF(C1="","",B列)
 と指定してみてくれ。
(ねむねむ) 2018/03/13(火) 13:09

 あるいはどこかのセルに「エラー」と入力しておいて(例えばE1セル)
 =IF(C1="",E1,B列)
 でも。
(ねむねむ) 2018/03/13(火) 13:20

ねむねむさん

ありがとうございます。

これでエラーメッセージがでるといいのですが
無理でしょうか?
(LT) 2018/03/13(火) 13:35


 どのタイミングでエラーにしたいのだろうか?
(ねむねむ) 2018/03/13(火) 13:36

ねむねむさん

セルを選択した時の矢印を押した時がいいです。
宜しくお願い致します。
(LT) 2018/03/13(火) 15:21


 (ねむねむ) 2018/03/13(火) 13:20
 この方法は?
 もし、エラーダイアログを出したいということであれば私にはちょっと思いつかない。

(ねむねむ) 2018/03/13(火) 15:26


たとえば別シートを使っていいのであれば
Sheet2のA1に

=IF(Sheet1!$C$1<>0,Sheet1!B1,"")

と入力して下までコピー

D1のデータ入力規制で

=Sheet2!$A:$A

としておけばリストボタンを押しても空欄しか表示されず
なにか直接入力してもエラーがでます。
空白を返しているところを例えば"C1が未入力です"にかえれば
リストボタンを押したときに「C1が未入力です」がいっぱい表示させることはできると思います。

リストボタンを押したときにエラーを返す方法はわかりませんでした。
(くまお) 2018/03/13(火) 15:37


まおさん

ありがとうございます。

こんな方法もあるのですね!
しかし、できればエラーメッセージが
でるようにしたいのでが無理なのでしょうか?

VBAでもいいのですが、さっぱりわかりません。
どなたかお願いいたします。

(LT) 2018/03/13(火) 15:55


マクロならば、例えば以下。

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$D$1" Then Exit Sub

    If Target.Value <> "" Then
        If Target.Offset(0, -1).Value = "" Then
            Application.EnableEvents = False
            Target.Value = ""
            Application.EnableEvents = True
            MsgBox "C1セルを先に指定してください", vbCritical, "エラー"
        End If
    End If
 End Sub

これで、D1セル選択した際に、C1セルが空欄ならエラー表示し、D1セルを空欄に戻します。(入力できないようにというのは、シートのロックでも活用しないと難しいので、入力後に消す方法にしています)

ただ、片手落ちだなぁ、と思うのが、C1セルとD1セル両方を選択した後、C1セルをDELキーで消しても、D1セルは選択が残ったままなんですよね。 それでも構わなければ、試してみてください。
(???) 2018/03/13(火) 16:19


???さん

ありがとうございます。

かなり、やりたいことに近づいてまいりました。
D2以降にも反映するには
どこを、書きかえれば良いのでしょうか?

(LT) 2018/03/13(火) 16:59


範囲適用ならば、最初からそう言ってもらわないと…。 1セルだけで条件を出したのならば、ご自身で応用して変えるべきですよ?

とりえずは、以下のように1セルだけとD列だけを条件に変えます。行にも制限があるならば、それはご自身で追加してみてください。Intersectメソッドによる範囲指定判定もよく使われます。 そして、エラーメッセージの対象セルアドレスが行によって変わってくるので、そこも直しています。

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count <> 1 Then Exit Sub
    If Target.Column <> 4 Then Exit Sub

    If Target.Value <> "" Then
        If Target.Offset(0, -1).Value = "" Then
            Application.EnableEvents = False
            Target.Value = ""
            Application.EnableEvents = True
            MsgBox Target.Offset(0, -1).Address(0, 0) & "セルを先に指定してください", vbCritical, "エラー"
        End If
    End If
 End Sub
(???) 2018/03/13(火) 17:08

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.