• ベストアンサー

Excel:既入力項目をドロップダウンリストに(入力規則?)

Excelで、 ある列に簡単な文字列を入力していっているのですが、 それまでに同じ列で入力したのと同じ内容を入力する際に、 ドロップダウンリストを使いたいと思っております。 入力リストとも思うのですが、内容が固定でなく、 新たな内容を入力したら、それもリストで 使えるようにしたいです。 (例) AAA (空白) (空白) BBB (空白) CCC (空白)     ←ここを入力するときに、      AAA・BBB・CCCから選択またはDDDを手入力     ←上でDDDを入力していたらAAA・BBB・CCC・DDDから選択      そうでなければAAA・BBB・CCCから選択 以下ずっとこんな感じ(新項目を入力したら以後それもリストに入ってほしい) このような場合、どのように設定したらよいのか、 お分かりの方がいらっしゃいましたらご回答ください。

noname#166246
noname#166246

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

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

こんにちは。 >自動的にリスト形式になってしまい、新たな(=リストにない)項目入力ができなくなってしまいます。 これは、私のミスです。すみません。それと、細かい点も見直してみました。また、ダブルクリックではなく、右クリックや、Alt + ↑に置き換えることも可能です。 以下のようにすれば、リストにないものでも加えられるようになります。入力規則のドロップダウンが邪魔になるときに、消すプログラムも付けておきます。シートをアクティブにすると消えます。 それと、今は、文字のリストを使っていますので、たぶん、そんなに多く入らないかもしれません。もし、そういう状況になったら、シートのどこかにリストを作ってあげれば、1000個ぐらいは可能になると思います。ただ、1000個もあったら、探すのが面倒だと思いますが。 '------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim tRng As Range   Cancel = True   ActiveCell.EntireColumn.Validation.Delete   If WorksheetFunction.CountA(Target.EntireColumn) = 0 Then Exit Sub   Set tRng = Range(Cells(1, Target.Column), Cells(Rows.Count, Target.Column).End(xlUp))   With Target.Validation     .Delete     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _      Operator:=xlBetween, Formula1:=UniqLists(tRng)     .IgnoreBlank = True     .InCellDropdown = True     .ShowError = False   End With End Sub Function UniqLists(rng As Range) As String 'リスト化する関数プロシージャ   Dim i As Long   Dim ret As Variant   Dim buf As String   With rng.Columns(1)     For i = 1 To .Rows.Count       If .Cells(i, 1).Value <> "" Then         ret = Application.Match(.Cells(i, 1).Value, .Cells, 0)         If IsNumeric(ret) And ret = i Then           buf = buf & "," & .Cells(i, 1).Value         End If       End If     Next i   End With   UniqLists = Mid(buf, 2) End Function '------------------------------------------- Private Sub Worksheet_Activate() 'シートをアクティブしたときに、入力規則のリストを削除する Dim rng As Range  On Error Resume Next  Set rng = ActiveSheet.Cells.SpecialCells(xlCellTypeAllValidation)  rng.Validation.Delete  Set rng = Nothing  On Error GoTo 0 End Sub

noname#166246
質問者

お礼

希望の動作を確認いたしました。 前回のものですと何も入力していない列をダブルクリックすると エラーになってしまっていたのですが、 指摘していないのにしっかりと修正されていた!のも 大変感心いたしました。 ありがとうございました。

その他の回答 (5)

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

2つのことと関連していて、難しい点は、 (1)入力規則   途中空白がある   項目(入力規則の元のデータ)が増えていく (2)オートフィルタ   ALT+↓ 既に入力した文字列に限るなら(2)が相応しいが、途中行で空白セルがあるとそれより上は出してくれない。 ーーー 例データ A列は入力列。B列は作業列 A列   B列 連番 aaa 1 aaa sss 2 sss xxx 3 xxx xxx ssss 4 ssss xcvvv 5 xcvvv B2の式 =IF(AND(A2<>"",COUNTIF($A$2:A2,A2)=1),MAX($B$1:B1)+1,"") 一応の縛りとして、第100行まで入力するとする。 第100行まで式を複写。 ーーー H列は作業列。 H2は=IF(ROW()-1>MAX($B$1:$B100),"",INDEX($A$1:$A$1:$A$100,MATCH(ROW()-1,$B$1:$B$100,0))) を第100行まで式複写。 結果 aaa sss xxx ssss xcvvv ーーー 入力規則の設定操作 A列A2:A100を範囲指定して データ 入力規則 リスト 元の値に式で =OFFSET($H$2,0,0,MAX($B$2:$B$100),1) ーーー これで質問要求に近いものだろう。 上記は「imogasi方式」(興味あればGoogleで照会のこと)の応用です。

noname#166246
質問者

お礼

ありがとうございます。 おっしゃる方法でうまくいきました! (新たな項目を入力できなかったので 入力規則でエラーメッセージを出す というチェックは外しましたが) No.4さんように、マクロ?を使うか、 作業行(セルのコピーあり)を使うかってことで、 他の作業条件を見ながら選択していきたいと思います。

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

こんにちは。 ご質問者さんのおっしゃっているドロップダウンリストは、右クリックメニューに出てくるドロップダウンリストだと思いますが、#3さんのおっしゃるリストは、間に空白があると出てこないはずです。 そこで、マクロで代用品を作ってみました。シート・タブを右クリックして、コードの表示で、以下を貼り付けてください。入力規則のドロップダウンリストは、いつも一個しか存在しません。 以下は、ダブルクリックして、ドロップダウンリストを表示します。 '------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'ダブルクリック・イベント Dim tRng As Range   Cancel = True   Columns(Target.Column).Validation.Delete   Set tRng = Range(Cells(1, Target.Column), Cells(Rows.Count, Target.Column).End(xlUp))   With Target.Validation     .Delete     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _      Operator:=xlBetween, Formula1:=UniqLists(tRng)     .IgnoreBlank = True     .InCellDropdown = True   End With End Sub Function UniqLists(rng As Range) As String   Dim i As Long   Dim ret As Variant   Dim buf As String   With rng.Columns(1)     For i = 1 To .Rows.Count       If .Cells(i, 1).Value <> "" Then         ret = Application.Match(.Cells(i, 1).Value, .Cells, 0)         If IsNumeric(ret) And ret = i Then           buf = buf & "," & .Cells(i, 1).Value         End If       End If     Next i   End With   UniqLists = Mid(buf, 2) End Function      

noname#166246
質問者

お礼

ありがとうございます。 基本的なことは、うまく行きました! すばらしいです。 ただ、すいませんが、一点だけリクエストがあります。 もしお分かりなら教えてください。 それは、一度ダブルクリックしたセルに対して、何も入力せず一度フォーカス(選択)を外したあと、 再度そのセルに移動すると(その移動がマウスのクリックでもキーボードの矢印キーでも) 自動的にリスト形式になってしまい、新たな(=リストにない)項目入力ができなくなってしまいます。 一度もダブルクリックしなければ、新たな項目を入力できるのですが。 一度ダブルクリックしたセルもこの初期状態に自動的に戻すなんてことはできませんでしょうか。

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.3

こんにちは  入力規則にそのような高度な機能はありませんが Excel2003の場合、入力済セルに接しているセルをクリックなどして入力状態にした後に[Alt]+[↓]キーを押すと上に入力したデータが入力順に整理されて選択できるようになっています。  質問者さんのExcelではできませんか?

noname#166246
質問者

お礼

ありがとうございます。 試した見たところ、Alt+↓は 空白セルが間にあるとうまく行かないみたいです。 (Excel2003) 質問の(例)のような状態になっておりますので。。。 残念です。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

例えば、元のデータの入力している範囲が、A2:A10だとすると、 データ→入力規則→リストの元の値で =$A2:$A65536 のように変更してOKすればいいと思われます。(入力されている最終行以降の空白データは表示されません) あえて、最終行までと指定したい場合は、 =INDIRECT("A2:A"&MATCH(10^100,A:A,1)) のような数式をいれればいいです。

noname#166246
質問者

お礼

ありがとうございます。 > 元のデータの入力している範囲が、A2:A10だとすると、 というのはどのような意味でしょうか。 元のデータ自体が入力に従って増えて行くのですが。。。 いちおう、=$A2:$A65536 の方でやってみましたが、 ドロップダウンリストが 空白になってしまいました。

  • akiomyau
  • ベストアンサー率43% (555/1280)
回答No.1

残念ながらそういった自動的にリストが追加されるような設定はありません。

noname#166246
質問者

お礼

ありがとうございます。 そうですかー。残念です。

関連するQ&A

  • MSWord2007のドロップダウンリストについて

    MSWord2007で表の中にドロップダウンリストを作成したのですが、 文字列の長さによって表の幅が勝手に変わってしまいます。 表の幅等が変わらないように、プロパティなどでサイズ固定してみたのですが、 ドロップダウンリストから文字列を選択すると、 やはり、表の幅が勝手に変わってしまいます。 普通の文字入力のように、自動改行してくれないものでしょうか? 少し文章では、わかりにくいので、下に例を書きます。 3つのセルがある表に五文字くらい入る幅で作成した場合、 |aa |bbb | ▼ |(▼がドロップダウンリスト) で、ドロップダウンリストの中にあるccccccccを選択すると |aa|bbb|cccccccc| と、左側が圧迫されます。自動改行されません。 本当は一番右端のセルだけ cccccc ccc という風に自動改行になるのが理想なんです。 これは、MSWord2007で可能でしょうか??

  • ドロップダウンで「aaa」を選択したら表示では「A」としたい。

    こんにちは。 ドロップダウンリストで困っています。 入力規則から、ドロップダウンリストを作成しています。 リストの中身(元の値)はaaa,bbb,cccとしているのですが、 プルダウン中と、選択後や他のセルにカーソルが移動した時の表示を変化させたいのです。 aaaを選択→A bbbを選択→B cccを選択→C どなたか教えていただけるかたがいましたら、 よろしくお願い致します。

  • 入力規則について(複数セルへの反映)

    EXCELの入力規則について教えてください。 まず下記のような表を作成しました…      A   B      1  AAA  111    2  BBB  222    3  CCC  333   この表のA列を利用して、入力規則によるリスト作成を行いました。 プルダウンリストには「AAA・BBB・CCC」が表示されます。 この際、「AAA」を選択すると、その横のセルにB列の「111」 「BBB」を選択すると、その横に「222」が自動入力されるような 設定は可能なのでしょうか。 お分かりになる方がいらっしゃいましたらぜひご指導下さい。 宜しくお願い致します!

  • 【Excel】入力規則のドロップダウンリストについて

    入力規則の入力値のリストでドロップダウンリストにセル範囲を指定せずスペースを追加したいのですが・・・ ドロップダウンリストに1と2とスペースを元の値の欄に直接入力し表示することに例えてご指導頂ければ幸いです。

  • 抽出して並べ替えたい

    初めまして 非常に悩んでいます。 エクセルシートの列に下記のようにデータが並んでいます。(文字列) AAA bbb ccc (空白) BBB ddd eee (空白) AAA bbb ccc (空白) AAA eee ggg 並べ替え後 AAA AAA BBB bbb eee ddd ccc ggg eee 尚、列上でセル位置は任意で、空白行も任意です。(1つ以上です) できれば関数でお願いします。 VBAの場合、使用したことがないので詳しくお願いします。

  • エクセル 入力規則でドロップダウンリストが表示されない

    いつもお世話になります。 エクセル2000の入力規則のリストで、ドロップダウンリストを使って文字を入力したいのですが、ドロップダウンリスト"から選択する"にチェックを入れているのに、何故かドロップダウンのマークが 表示されません。

  • エクセルのドロップダウンリスト

    こんにちは。エクセルで入力規則からドロップダウンリストを作成するときの質問です。リストの元の値を名前定義で指示しているのですが、リスト内容を後から追加できるように名前定義の範囲を現在値が入力されている範囲を超えて空白セルもいくつか一緒に定義しています。 このとき、ドロップダウンリストには当然名前で定義されたリストが出るのですが、空白も一緒に出てきます。 質問は、この空白を無視(値が入力されている範囲だけ)してリスト表示できないかということです。あるいは、空白がリストに含まれてでるのですがその際にリストが一番上でなく真ん中あたりが最初に表示され、つまりリストの▼を押した段階で空白リスト、その後スライドバーでリスト上部を表示させて選択する形になっているのですが、いきなり最上部のリストが表示される方法でも構いません。 よろしくお願いいたします。

  • ドロップダウンリストを2列で表示するには?

    Excel2010を使用しています。 1列目に商品ID、2列目に商品名が入ったリストをもとに 入力規則からドロップダウンリストをつくろうとすると、 「区切り文字で区切られたリストか、または単一の行または列の参照でなければならない」 とでてしまいます。 2列のドロップダウンリストを作ることはできないのでしょうか? 入力するのは1列目ですが、2列目も参照しながら選択できるようにするのが目的です。 よろしくお願いします。

  • ○、×のドロップダウンリストを作りたい。

    エクセルで「○」か「×」かを選択できるように ドロップダウンリストを作りたいのです。 ドロップダウンリストに表示させたい 「○」「×」を別のセルに入力して、選択するように しているのですが、これを表示させないようにするには どうしたらよいのでしょうか? つまり、私がしていることは データ→入力規則→入力値の種類を「リスト」にする→元も値を「○、×が入力してあるセル を選択しているのです。」 この、元の値のセルの値が邪魔なのです。 どうぞ、よろしくお願いします。

  • excelでのドロップダウンリストを作りたい

    例えば下記のような表があって、そこの列に入る文字をドロップダウンリストから選びたいのです。 例)    りんご    みかん    なし 色々なホームページを見て「入力規制」というものをしてみたのですが、私が欲するものではありませんでした。 何故なら  (1)入力規制をしてしまうと新しい文字を入力することができない。→絶対に新しい文字を入力する為。 (2)なら余白部分までもセルを選択して入力規制をする。→見た目かっこ悪い。かっこよさを求めているため、余白や同じ文字をドロップダウンリストに入れたくない。 初心者の部類に入る私の質問に是非お答えください。 どうすれば、かっこいいドロップダウンリストができますか?

専門家に質問してみよう