こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【Excel】入力規則のリスト表示について

教えて下さい!
以前こちらで質問し、関数では教えて頂いたのですが・・・

Excelで入力規則のドロップダウンリスト「A」「B」の2つを作り、
「A」で選んだ内容によって、「B」で選択できる内容を変化させたいと
考えています。

INDIRECT関数を使用し、内容を変化させることは出来るようになったのですが
「A」を選択し直すと、「B」にすでに入力されているデータが一度クリアされ
空白の状態からリストを選択し、文字を入力するにはどうしたらよいでしょうか?

Excelの標準的な方法では出来ないというお話があり、条件付き書式で
=COUNTIF(INDIRECT(「A」),「B」)=0
で、文字色を白にし見えないようにする方法は教えて頂きました。
ですがこれで行うとExcel自体がエラーで閉じてしまいます。(Excel2002)

マクロを使用した方法で文字をクリアすることも難しいのでしょうか??

投稿日時 - 2006-04-11 11:39:57

QNo.2085080

すぐに回答ほしいです

質問者が選んだベストアンサー

#1です。
補足質問読みました。
が、いまいちよくわかりません。

こういうこと↓ですか?
A2セルのリストから、松・竹・梅のいずれかが選択できる。
松をクリックして選択
B2セルのリストからひとつ選択
ふたたび A2セルに戻って、またまた 松をクリック!!
B2セルがクリアされる (T_T)

ということだとして、どうしてワザワザおんなじものを選ぶんだかと思ってしまうのですが、、、

一応修正しました。
該当するシートタブを右クリック~コードの表示
#1のコードをマウスでドラッグして範囲指定~DELETEキーで削除

↓のコードをコピーして貼り付けてください。

'-----------------↓ココから

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim myBefore As String
  Dim myAfter As String

  If Target.Count <> 1 Then Exit Sub

  If Not Application.Intersect(Target, Range("A2:A10")) Is Nothing Then
    Application.EnableEvents = False
    myAfter = Target.Value
    Application.Undo
    myBefore = Target.Value
    Target.Value = myAfter

    If myAfter <> myBefore Then
      Target.Offset(0, 1).ClearContents
    End If
    Application.EnableEvents = True

  End If

End Sub

'-----------------↑ココまで

ALT+Qキーでワークシートに戻り、動作確認してください。

◆#1のコードでとりあえずうまくいったのならだいじょうぶとは思いますが、値を変更した右隣のセルがクリアされます。
◆Range("A2:A10") で指定するのは、「A」の範囲のみです。「B」の範囲は指定しないでください。( ←←"A2:B10" のようにはしないでください、ということです。"A2:B10"にすると、 B列の値を変更したら C列の値がクリアされてしまいます、念のため )

投稿日時 - 2006-04-11 18:51:35

お礼

求めていた解答です!出来ました。
ありがとうございました。

投稿日時 - 2006-04-14 11:47:27

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

前の質問は読んでいませんので
(no分からないし)
重複していたらごめんなさい。

こういった場合
http://www2.odn.ne.jp/excel/waza/validation.html#SEC5
のように
OFFSETとMATCHがいいと思います

投稿日時 - 2006-04-11 13:08:16

お礼

リストで表示する方法は出来たんですが、その後の表示方法について
解答を求めていました。
ご解答ありがとうございました。

投稿日時 - 2006-04-14 11:49:37

ANo.1

セル位置、範囲がわからないので推測ですが、、、
入力規則が設定されている範囲が A2:B10だとします。

該当するシートタブを右クリック~コードの表示
右のコードウィンドウに↓をコピーして貼り付けてみてください。

'--------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("A2:A10")) Is Nothing Then
    Target.Offset(0, 1).ClearContents

  End If

End Sub
'--------------------------------

ALT+Qキーでワークシートに戻ります。
動作を確認してください。

◆範囲を変更する場合は、2行目
Range("A2:A10")

を修正してください。

投稿日時 - 2006-04-11 12:13:05

補足

早速のご回答、ありがとうございます。
クリアすることが出来ました◎
また、もう一つ質問させて頂いてよろしいですか?

この方法で「A」を選択後「B」を選択し、再度「A」の同じ項目(最初に選択したものと同じもの)
を選択すると「A」に入っていたデータに変わりはないのにクリアされて
しまいますよね?
これを「A」に入っているものが同じデータである場合は、クリアされないようにする
にはどうしたらよいでしょうか??

投稿日時 - 2006-04-11 15:49:01

あなたにオススメの質問