• ベストアンサー

入力規則のリストについて

リストの使い方は分かったのですが、設定したセルにカーソルを合わせないとプルダウンの下矢印(▼)が表示されません。 常に表示させておく方法というのはあるんでしょうか? 誰か教えてください。お願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

>常に表示させておく方法というのはあるんでしょうか? 入力規則の機能の意味から考えて、リストを表示させたままにしておくことはできないでしょう。 入力の時必要になるのでその時だけ表示するのが目的でしょうから。 と、書いておしまいにしようと思いましたが ・ ・ ・ iyahayaさんのこの質問ができれば、ものすごく便利な時があるような気がしてきました。多数の中から繰り返し選択する処理は質問のように(下矢印▼)を押すのは面倒かもしれません。候補が常時画面に表示してあればコピー&ペースト感覚やクリックで入力できそうです。 開いたままのコンボボックスを表示し続けるのは困難なので、リストボックスを使ってみました。 機能としては、画面をどう動いても、左側にリストボックスを表示するようにしています。リストボックスが隠れてしまうセル位置を選択してもリストボックスは画面の左に現れます。   ※画面にボタンを配置したときに下の行を選択していくとボタンが見えなくなるので、    画面を固定して表題部分に小さいボタンを配置しているのを見た事があります。    そういう場合にも対応できます。 これで、質問にある、『常に表示させておく』が実現できていると思います。 Sheet1で、表示→ツールバー→Visual Basic でVisual Basicのツールバーを表示し、コントロールツールボックスをクリックし、それからリストボックスを1つシート上に作ります。 リストボックスに表示するリストがSheet2のA1:A20にあるとします。 作ったリストボックスを右クリックし、プロパティを選択し ListFillRange に Sheet2!A1:A20 を入力。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示し、Sheet1をダブルクリック。出てきたコードウインドウに下記コードを貼り付け。 シートに戻り、Visual Basicの編集モードを解除(三角定規と鉛筆?のアイコン)すると機能します。 今は、D~Z列ならリストボックスから選択可能です。 ここから ↓ 'この列を対象にリストボックスからの入力処理を行う<D:Zは例> Const inpColumn = "D:Z" 'リストボックスから選択した場合 Private Sub ListBox1_Change()   ListBoxDataSet End Sub '前回と同じリストを選択する場合Changeイベントが起きない。 '  しょうがないので使用者はダブルクリックする。 '  別データを選択して再度選択してくれれば不要にはなる Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)   ListBoxDataSet End Sub 'リストボックスで選択したリストを、シートの選択セル(単一または複数)に転記する Sub ListBoxDataSet()   Dim rg As Range '入力処理を行う列と選択範囲の共通部分   Set rg = Intersect(Range(inpColumn), Selection)   If Not rg Is Nothing Then     '共通部分にリストボックスの選択リストを転記する     rg = ListBox1.List(ListBox1.ListIndex)   End If End Sub 'リストボックスをいつも表示する Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)   Dim gamTop As Range '画面の左上セル   Set gamTop = Cells(ActiveWindow.ScrollRow, ActiveWindow.ScrollColumn)   ListBox1.Top = gamTop.Top + gamTop.Height / 2   ListBox1.Left = gamTop.Left + 10 End Sub

iyahaya
質問者

お礼

質問の説明がイマイチでした。 文脈の中からコンボボックスについて検索し、表示→ツール→フォームからリストボックスorコンボボックスで私の考えていた問題は解決できました。 しかし、そんな事もできるんですねぇ。 勉強になります。 ありがとうございました。

その他の回答 (1)

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

先日も似た質問にコンボボックスで答えたのですが、 ぜひ下記をやってみてください。たった1行のコーディングで#1の方のご回答と似たことが実現します。 エクセルのSheet1にListBoxを1つ配置し、ListBoxはSheet1上の邪魔にならない部分に配置しておく。 右クリックで「プロパティ」ウインドウを出す。その中の ListFillRangeを例えばE1:E5とし、E1に東京、E2に大阪、E3に名古屋、E4に広島、E5に福岡と入力する。 右クリックし「コードの表示」をダブルクリックする。 Private Sub ListBox_Change() End Sub が現われるから、 Private Sub ListBox1_Change() ActiveCell = Worksheets("sheet1").ListBox1.Text End Sub と1行入れて、デザインモードを終了する。 Sheet1に戻りどこでもデータを入れたいセルをクリックで選択し、リストボックスの1つのアイテムをクリックすると、そのクリックした値が指定していたセルにセットされる。リストボックスは常にSheet1に見えています。

iyahaya
質問者

お礼

質問の説明がイマイチでした。 文脈の中からコンボボックスについて検索し、表示→ツール→フォームからリストボックスorコンボボックスで私の考えていた問題は解決できました。 私の質問からさらに発展した問題と回答が返されたことに驚いています。 私としては非常にうれしい限りです。 こういうのがインターネットのメリットでしょうね。 ポイントは回答の順番ということにさせていただきました。

関連するQ&A