• ベストアンサー

Excel2003で他の列のデータをドロップダウンリストに

質問のし直しです。 下記の場合、B列でのドロップダウンリストに(aa bb cc dd ee)と表示させるには、どうしたら良いのでしょうか? A列  B列 bb     dd aa     ee bb     ee cc    dd aa bb 実際には文字列なのですが、1300行で、A列のデータは300個位在ります。 宜しくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 前の質問から読んできました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=3423585 右クリックメニューの中の「ドロップダウンリスト」機能の話ですね。 私は、かつて、一度、同様の質問を受けたことがあるのですが、「不可能」という解答をしてしまった記憶があります。結局、Excelの親切な機能ではあっても、ユーザー・オプションは、どこにもありませんから、それを変えたいというのですから、そんなに簡単な質問ではないのですね。 >他の列のデータをドロップダウンリストに追加して表示させる方法を教えて下さい。 >初心者の頃に、A列のデータをB列の一番下の表外に貼り付けプルダウンリストにA列B列合わせたものを表示させていました。(但しこれだと並び替えをする時に範囲指定が必要)イメージとしたらこれと同じ事をしたいのです。 初心者でなくても、こういう方法で間に合わせることになると思います。並べ替えるときに、範囲指定は、そんなに大変なことではありませんからね。 右クリック・メニューにも組み込むことは可能ですが、それは、強い希望があったらということにさせていただきたいです。なかなか、プログラムでも面倒くさい内容(>私が苦手)のように思うからです。たぶん、可能だとは思います。

sapporolove
質問者

お礼

有難うございました。 何か簡単に出来ると思っていたのですが、無理のようですね。 昔、Excel95の頃、近くに詳しい知人がいて、このプログラムを作成してもらい、しばらくフロッピーに保存していたのですが無くなってしまいました。機能が進めばこれくらいの事は簡単に出来るようになるだろうと考えていました。諦めた方が良さそうですね。 お世話になりました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 まだ、試作段階ですが、入力規則で選択をさせるモードを作ってみました。今のところ、セル自体に、ドロップダウンの表示をさせることは無理のようです。 右クリックメニューの中に、「マイリスト」というものが現れます。 なお、これは、試作段階ですから、単に、A列を表示させているだけです。ユニークリストではありません。 '標準モジュール '設定する場合は、 'Auto_Open() 'Call Menu_Add 'と呼び出してあげればよいです。 'Option Explicit Private fixRng As String Sub Menu_Add() 'マウスの右クリックメニューに加えます Dim myCBCtrl As CommandBarControl Dim fixRng As String On Error Resume Next   CommandBars("Cell").Controls("マイリスト").Delete On Error GoTo 0 With ActiveSheet  fixRng = .Range("A1", .Range("A65536").End(xlUp)).Address End With Set myCBCtrl = CommandBars("Cell"). _      Controls.Add _      (Type:=msoControlButton, Temporary:=True, Before:=1)    With myCBCtrl       .Caption = "マイリスト"       .OnAction = "MyListMcr"       .BeginGroup = True    End With    End Sub Private Sub MyListMcr()   On Error Resume Next    ActiveSheet.UsedRange.Cells.Validation.Delete   On Error GoTo 0   If fixRng = "" Then    With ActiveSheet      fixRng = .Range("A1", .Range("A65536").End(xlUp)).Address    End With   End If     With ActiveCell.Validation     .Delete     .Add Type:=xlValidateList, _        AlertStyle:=xlValidAlertStop, _        Operator:=xlBetween, _        Formula1:="=" & fixRng     .IgnoreBlank = True     .InCellDropdown = True     .ShowInput = True     .ShowError = True   End With   '5秒後に、入力規則を削除(ただし、入力中は実行されません   Application.OnTime Now + TimeValue("00:00:05"), "DelValidate" End Sub Private Sub DelValidate()  On Error Resume Next    ActiveSheet.UsedRange.Cells.Validation.Delete  On Error GoTo 0 End Sub

sapporolove
質問者

お礼

わざわざ貴重なプログラムを教えて戴き、申し訳御座いませんでした。 残念ながら私のレベルでは、理解不能です。 唯、今回要望した機能はデータ入力に役立つ筈です。 プログラムが完成される事を、お祈りしております。 本当にお世話になりました。                             深謝

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

質問のしなおしにしては、わかりにくい。 「A列のデータで、重複をしないデータのリストを作りたい」と質問をすれば判りやすいのです。 ーー 前の質問ではA列とB列の2列にあるデータ全体を対象にして(重複を省くことはそうするとして)ドロップダウンにだしたい、と誤解したように記憶する。 質問のB列を載せているのが紛らわしい。 ーー 300行もドロップダウンリストに出すのは、使い勝手が悪いからから、常識では考えられない。 2段検索など(難しいが)考えるべきでしょう。 ーー 例データA1:A11 第1行は空白行 A列  B列 bb 1 aa 2 bb cc 3 aa bb dd 4 ee 5 ee dd B2には式 =IF(COUNTIF($A$2:A2,A2)=1,MAX($B$1:B1)+1,"") 下方向に式を複写する。 結果上記の通り。 ーー どこでも良いが、例でE列に =INDEX($A$2:$A$1000,MATCH(ROW()-1,$B$2:$B$100,0)) と入れて下方向に式を複写する。 結果 bb aa cc dd ee #N/A #N/A #N/Aを出さないようにするには、 =IF(ROW()-1>MAX($B2:$B100),"",INDEX($A$2:$A$1000,MATCH(ROW()-1,$B$2:$B$100,0)))とIFの部分を付け加える。 ーー A列の増減がほとんどないのなら、こんな複雑な式を使わず データーフィルターフィルタオプションー「重複するレコードは無視する」で指定範囲に望みのものが出ますが。A1に項目見出しを入れてやること。

sapporolove
質問者

補足

有難うございました。 「A列とB列の2列にあるデータ全体を対象にして(重複を省くことはそうするとして)ドロップダウンにだしたい」 こういう事なのですが、質問の記述で、A列にはaa,bb,ccがあり、B列にはdd,eeがあり、B列のドロップダウンリストのプルダウンリストの中に、合わせて aa,bb,cc,dd,ee を表示させたいと書いたつもりです。 実際にはB列には何箇所かデータを入力済みで、未入力セルにはプルダウンリストにB列の記入済みのデータを表示させるよう連続性を保つ為 * 印を入れてます。 300個のデータは外国人名で、アルファベット順に並んでいるのでプルダウンリストの横のスライドバーを動かして簡単に目的の項目を探し出せます。又、表全体の行の増加は殆どありません。 基本的な質問になりますが、ドロップダウンリストというのは、なにも設定しなくてもその列のデータはプルダウンリストに重複されずに表示されると言う事でよろしいでしょうか? 初心者の頃に、A列のデータをB列の一番下の表外に貼り付けプルダウンリストにA列B列合わせたものを表示させていました。(但しこれだと並び替えをする時に範囲指定が必要)イメージとしたらこれと同じ事をしたいのです。 宜しくお願い致します。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.1

    A   B   C 1   bb   1   bb 2   aa   2   aa 3   bb       cc 4   cc   4 5   aa 6   bb B1=IF(COUNTIF($A$1:A1,A1)=1,ROW(),"") C1=IF(ROW(A1)>COUNT(B:B),"",INDEX(A:A,SMALL(B:B,ROW(A1)))) ★下にコピー

sapporolove
質問者

補足

有難うございました。 B列が挿入され列番号が記されていますが、新たに列を作成するのでしょうか? 又、B1=IF****, C1=IF****とありますが、セル番号B1とC1にこの関数を貼り付けるのでしょうか?下にコピーは、B1の下はコピー出来ますが C1より下にコピーすると、記入してたデータが変わってしまうのではないかと思いますが違うのでしょうか? 理解力不足で申し訳ありません。 宜しくお願い致します。

関連するQ&A