• ベストアンサー

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

教えて下さい! 以前こちらで質問し、関数では教えて頂いたのですが・・・ Excelで入力規則のドロップダウンリスト「A」「B」の2つを作り、 「A」で選んだ内容によって、「B」で選択できる内容を変化させたいと 考えています。 INDIRECT関数を使用し、内容を変化させることは出来るようになったのですが 「A」を選択し直すと、「B」にすでに入力されているデータが一度クリアされ 空白の状態からリストを選択し、文字を入力するにはどうしたらよいでしょうか? Excelの標準的な方法では出来ないというお話があり、条件付き書式で =COUNTIF(INDIRECT(「A」),「B」)=0 で、文字色を白にし見えないようにする方法は教えて頂きました。 ですがこれで行うとExcel自体がエラーで閉じてしまいます。(Excel2002) マクロを使用した方法で文字をクリアすることも難しいのでしょうか??

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

  • ベストアンサー
  • EL-SUR
  • ベストアンサー率76% (83/108)
回答No.3

#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列の値がクリアされてしまいます、念のため )

froma_a
質問者

お礼

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

その他の回答 (2)

noname#17648
noname#17648
回答No.2

前の質問は読んでいませんので (no分からないし) 重複していたらごめんなさい。 こういった場合 http://www2.odn.ne.jp/excel/waza/validation.html#SEC5 のように OFFSETとMATCHがいいと思います

froma_a
質問者

お礼

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

  • EL-SUR
  • ベストアンサー率76% (83/108)
回答No.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") を修正してください。

froma_a
質問者

補足

早速のご回答、ありがとうございます。 クリアすることが出来ました◎ また、もう一つ質問させて頂いてよろしいですか? この方法で「A」を選択後「B」を選択し、再度「A」の同じ項目(最初に選択したものと同じもの) を選択すると「A」に入っていたデータに変わりはないのにクリアされて しまいますよね? これを「A」に入っているものが同じデータである場合は、クリアされないようにする にはどうしたらよいでしょうか??

関連するQ&A