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

解決済みの質問

エクセルでリストからの選択入力時の枠内の表示

いつもお世話になっております。
エクセル2013です。
入力表のセルへの入力をリストからの2段階の選択入力(A列を選ぶとB列に対応する選択肢表示される)にしているのですが、A列は一番上から表示されるのですが、B列はセルをクリックしたときに開いてくる選択リストウィンドウに何も出ておらずいちいちバーを上に持ち上げる必要が有ります。
一番上の選択肢が表示されるような設定方法があると思うのですが見つけられないので教えてください。
複数の人で使うので何か表示されていないとバグと間違われるので。

投稿日時 - 2019-01-11 15:18:43

QNo.9576626

困ってます

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

データの入力規則とINDIRECT関数の組み合わせで実現しているものとして回答します。
#ただし、姑息な方法です。
B1セルがプルダウンリストで選択肢を入力するセルだとします。
B1セルを選択し、データの入力規則を表示→エラーメッセージと展開します。
「無効なデータが入力されたらエラーメッセージを表示する」のチェックを外し<OK>。
そして、B1セルに半角スペースを入力。
入力し終わったら、もう一度B1セルの入力規則で「無効なデータが入力されたら…」にチェックをつけて<OK>
この状態で保存しておけば大丈夫な筈です。

入力規則のプルダウンリストは現在の値と同じ値を一番上に表示しようとします。
B1セルの値が空白の状態でプルダウンリストを開くと選択肢の中の空白が選択された状態=プルダウンリストの一番上が空白になるのです。
半角スペースは選択肢の一覧にないので、選択肢の一番上から表示してくれると言う寸法です。

投稿日時 - 2019-01-11 16:35:28

補足

このご回答を試していて思い出したのですが、選択領域の先頭に空白セルを踏めておくとプルダウンメニューの先頭が空白が先頭になって順次表示されることを思いだして、試してみたところうまくいきました。
例外もあるかもしれませんが、今回はこれで対応します。

大きなヒントになりました。

投稿日時 - 2019-01-18 15:46:51

お礼

ご回答ありがとうございました。
なるほどでした。

投稿日時 - 2019-01-17 15:22:12

ANo.1

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

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

-広告-
-広告-

回答(3)

ANo.3

質問には、用いている関数も記してないので、読者や回答者には、わかりにくいと思う。
私も、質問は、どういう事態か推測で下記を記している。
ーー
わたしも個人的な例を勝手に作ってやってみた。
不自然な個所はお許しください(例なぜ2府県か?それら府県に市はもっとあるだろう、参照テーブルはなぜH,I列なのか、とか)
ーー
こういうことではないか?
設例
A列に府県名を(手)入力。説明を簡単にするため、東京都と千葉県の2つのどちらかにする。
B列は、その府県をA列に入力後に、その府県の、市の名のリストを出し、その中からマウスのクリックで選ばせる。
参照する府県と市名の対応データはH列とI列に用意しておく。(下記ではK列まで許容の式となっている。)
下記はH1:I8のデータです。
東京都千葉県
武蔵野市千葉市
三鷹市船橋市
立川市木更津市
日野市市川市
昭島市習志野市
  野田市
  流山市
各府県で最大9行しか使わないと仮定する。
データー入力規則ーリストーここで関数式らしいものを入れるのだが
当初
=OFFSET($H$2,0,MATCH($A2,$H$1:$K$1,0)-1,9,1)))
行数を第2行から第10行までの行数の9(最大許容行数)にしていた。
するとB列で市名を選んでいるうちに、リストの第1行目が、武蔵野市ではなく
立川市や昭島市が現れるようになった。
リストの、スクロールバーを、上にマウスで上げれば仕舞いのはなしだが、この手間や弊害のことを質問者は言っているのかな、と思った。
そこで各府県ごとに、おいて、実際に登録している市の数だけをリストの表示の範囲を指定する、ようにしようとして、下記の式に至った。
ーー
改良して
=OFFSET($H$2,0,MATCH($A2,$H$1:$K$1,0)-1,COUNTA(OFFSET($H$2,0,MATCH($A2,$H$1:$K$1,0)-1,9,1)))
にすると、▼をクリックしたとき、H列やI列の第2行目から(第1行目は府県名にしてある)最下の有効市名の行(空白行の手前行、昭島市や流山市)まで、リストのアイテムが出た。
ーー
余談だが、
ユーザーフォームのリストボックスで、VBAを使う場合は表示第1行目を指定できた(そういうコードがある)と記憶するが、シートにおける入力規則の、エクセルVBAでは、現状では、判らないので、関数の回答です。
ややこしいが、OFFSET関数の威力を感じた。

投稿日時 - 2019-01-12 12:21:30

お礼

思った以上に手ごわい、という感じで当方の場合はスクロールバーを選択します。

投稿日時 - 2019-01-17 15:25:59

ANo.2

マクロを使っても良いなら対象シートに以下のマクロでも可

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    Range("B1") = " "
  End If
End Sub

投稿日時 - 2019-01-11 16:43:15

お礼

度々のご回答感謝!
これを使わせていただきます。

投稿日時 - 2019-01-17 15:23:08

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-