[EXCEL] リスト入力⑧ プルダウンの初期位置を固定する方法(開いたら一番上を表示) ~入力表作成レッスン~
▶目次>様式/入力表の作成>プルダウンリスト
▶関連記事:プルダウンリスト
【まとめ】
常にリストの一番上を表示させる方法
・項目とデータの間に空白セルを入れておく
・他のデータを選んだ後に、選び直したい場合、データを削除して空白セルにすれば、リストの一番上から選べる
・プルダウンリストは Alt+↓ だけでなく、Alt+↑ でも開ける
・Copilotの回答は役に立たなかった

【説明】
前の記事で、重複するデータがあるリストをプルダウンリストの「元の値」にしても、重複は排除される、と書きました。
これは便利です。
*追記:エクセルのバージョンにょっては重複は排除されないようです。
[EXCEL] プルダウンリストは重複データを自動で排除してくれない場合がある 相変わらずCopilotは適当 ~入力表作成レッスン~
一方で、長いリストになると、プルダウンリストを開いた際に、リストの途中や下の方が表示されてしまうことがあります。
というのも、プルダウンリストは、
「最後に選んだデータを表示する」という特性があります。
例えば、都道府県の中から下の方にある「鹿児島県」を選んだあと、同じセルで、今度は「北海道」を選ぼうとしても・・・

鹿児島県が出てきます。
まぁ、当たり前といえば当たり前です。
「選択結果を保持」するのがプルダウンリストの仕様ですから。
ちなみに・・・
プルダウンリストは Alt+↓ で開きますが、
Alt+↑ でも開きます。
なので、今表示されているデータより上にあるデータだな、と分かっていれば、Alt+↑ を押せばいいのです。
でも、私は Alt+↓ に慣れてしまっているので、選びたいデータが上にあろうが下にあろうが、とりあえず、Alt+↓ 。
リストが開いてから「上だっけ」と Alt+↑ に切り替える、というパターンです。
数ミリの指先移動ですけど、地味にイライラ、ではあります。
常にリストの一番上を表示させるためには・・・
セルに「初期値」を入れておく
下の表では、プルダウンリストの「元の値」にB列を設定しています。

ちょうど「都道府県」と「北海道」の間が空いているので、ここに「Alt+↓で選択」と入れておきます。
そして、リストを使うセルにも「Alt+↓で選択」と入れておきます。
そうすると、常にリストの一番上が表示されます。

ただし、当然ですが、一度下の方のデータを選んだら、今度はそのデータが表示されます。

この方法は、セルでのリスト選択が1回だけ(=選び直さない)、という場合にはいいかもしれません。
ただし、複数のセルが並ぶ場合、最初からすべてのセルに「Alt+↓で選択」と表示があるのは、うるさいかもしれません。

そもそも「空白」セルを設けておけばいい
そもそも、リストを使うセルは、もともと空白です。
そして「元の値」である「B列」の「都道府県名」の下も空白です。
そのため、普通に選択しても、リストの一番上が出ます。
これは、空白セルが初期値になるからです。

なので、
「項目とデータの間に空白セルを入れておく」ことで、常にリストの一番上を表示させられる、といえます。
セルのデータを消せば常に一番上が表示される
この場合でも、他のセルを選べば、次にデータを選び直す場合、最初に選んだデータが表示されます。
リストの一番上から選び直すことはできません。
でも・・・
リストの一番上から選び直したいなら、そのセルを消してしまえばいいんです。
DELETキー押下でデータは消えます。
その後、Alt+↓ を押すと、リストの一番上が表示されます。
例
① リストから「高知県」を選ぶと

②データを選び直すとすると「高知県」からの移動となる(Alt+↓ 又は Alt+↑ でデータ選択)

③ 「高知県」をDELETキー押下で消すと空白になる

④この状態から Alt+↓ を押すと、リストの一番上が出る

というわけでした。
なんだ、簡単じゃん。
Copilotに聞いてみたけど・・・
以下は多分、役に立ちませんが、参考まで。
この「常にリストの一番上を出したい」ということを、Copilotに聞いてみたところ、かなりチンプンカンプンというかトンチンカンな回答しか返ってきませんでした。
例えば、
・リストとは別のところにリストの一番上のデータを表示する
とか、
・マクロにより、プルダウンで選んでもデータは保持されないで常にリストの一番上が表示される、とか(何の意味がある?)。
ちゃんと聞いているつもりなんですが・・・
一連の「グルグル」を終えて、改めて聞いたら、こんな感じでした。
このマクロ使えるのかな?
(質問)
EXCELのプルダウンリストでデータを選んだあと、データを選び直す際に、リストの一番上を表示させたい。
(Copilot)
なるほど!整理すると「プルダウンリストで一度選んだあと、次に選び直すときにはリストを開いた瞬間に常に一番上から表示されてほしい」ということですね。
Excelの仕様について
データの入力規則のリストは、選び直すときに「前回選んだ値」が初期表示されます。
残念ながら、標準機能では「選び直すときに必ずリストの一番上を初期表示する」ことはできません。
考えられる対応策
標準機能での対応は不可 → Excelの仕様上、プルダウンは「最後に選んだ値」を保持する仕組みです。
VBAで制御する方法
プルダウンを開いた瞬間に一番上を表示することはできませんが、 「セルを選択したときに自動でリストの先頭値をセットする」ことは可能です。
例:E列にプルダウンがある場合
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
Set rng = Me.Range("E:E")
If Not Intersect(Target, rng) Is Nothing Then
If Target.Validation.Type = xlValidateList Then
Dim listItems As Variant
listItems = Split(Replace(Target.Validation.Formula1, "=", ""), ",")
Target.Value = listItems(0) ' 先頭の値を自動セット
End If
End If
End Subこのコードをシートのコード画面に貼ると、E列のセルを選んだ瞬間に「リストの一番上」が自動で表示されます。
その後プルダウンを開けば、常に先頭から選び直せます。
まとめ
標準機能では不可(Excelは前回選択値を保持する仕様)。
VBAを使えば「セルを選んだ瞬間に先頭値を表示」することは可能。
ただし「プルダウンを開いた瞬間に必ず一番上からカーソルが当たる」ような挙動はExcelでは制御できません。
👉 ご希望は「セルを選んだ瞬間に自動で先頭値を表示」する形で良いですか?それとも「プルダウンを開いたときに必ず一番上からカーソルが当たる」動作を求めていますか?
(私)
プルダウンを開いたときに必ず一番上からカーソルが当たる
(Copilot)
ご要望の「プルダウンを開いたときに必ず一番上からカーソルが当たる」動作について、結論から言うと Excelの標準機能やVBAでも実現できません。
理由
Excelの「データの入力規則」で作るプルダウンリストは、仕様として最後に選んだ値を保持し、その位置からカーソルが当たるようになっています。
VBAで「セルを選んだ瞬間に値を変える」ことは可能ですが、リストを開いたときのカーソル位置を制御する機能は提供されていません。
つまり「リストを開いた瞬間に必ず一番上からカーソルが当たる」ような挙動は、Excelの内部動作に組み込まれていて変更できないのです。
代替案 💡
完全には同じ動作はできませんが、近い使い方をする方法はあります:
セルを選んだ瞬間に先頭値を自動入力する(VBA)
これなら「リストを開くと常に先頭が表示されている」状態にできます。
ただし「選んだ値を保持する」ことはできなくなります。
ユーザーフォームのコンボボックスを使う
Excelのシート上ではなく、VBAでユーザーフォームを作り、コンボボックスにリストを設定すると、初期表示を常に先頭にすることが可能です。
ただし操作性は「シートのプルダウン」とは少し違います。
まとめ
標準のプルダウンでは不可能(Excelの仕様)。
VBAでもカーソル位置の制御は不可。
代替として「セル選択時に先頭値をセット」や「ユーザーフォームのコンボボックス利用」が考えられます。
👉 もし「選んだ値を保持したい」ことが重要なら、残念ながら「常に一番上からカーソルが当たる」動作は諦めるしかありません。 逆に「見た目上いつも先頭から始めたい」のであれば、ユーザーフォームのコンボボックスを検討するのが現実的です。
ご希望は「選択結果を保持したい」方向ですか?それとも「見た目上いつも先頭から始めたい」方向でしょうか。
(私)
選択結果を保持したい
(Copilot)
なるほど、ここがポイントですね ✨ 「選択結果を保持したい」=セルにはユーザーが選んだ値を残したい。 一方で「プルダウンを開いたときに必ず一番上からカーソルが当たる」=リストを開いた瞬間に先頭からスクロールされている状態にしたい。
結論
残念ながら Excelの入力規則のプルダウンリストは仕様上、前回選んだ値を保持し、その位置からカーソルが当たるようになっています。 つまり「選択結果を保持しつつ、次回開いたときに必ず一番上からカーソルが当たる」ことは 標準機能でもVBAでも制御できません。
代替案 💡
目的に近い挙動を作る方法はいくつかあります:
選択結果を保持する → そのままExcel標準の挙動に任せる → これが唯一「保持」を満たす方法です。
ユーザーフォームのコンボボックスを利用する
VBAでフォームを作り、コンボボックスにリストを設定すると、 「初期表示は常に先頭」「選んだ値は保持して別セルに書き込む」 という動作が可能です。
ただし操作性はシート上のプルダウンとは少し違います。
選択結果を別セルに記録し、プルダウンセルは常に初期値に戻す
プルダウンセルは「見た目上いつも先頭」
選んだ値は別の列に保存しておく → 「保持」と「常に先頭表示」を両立できます。
まとめ
選択結果を保持しながら、プルダウンを開いたときに必ず一番上からカーソルが当たる → Excelでは不可能。
近い挙動を作るなら ユーザーフォームのコンボボックス や 別セルに記録する仕組み が必要。
👉 ご希望は「どうしてもシート上のプルダウンでやりたい」でしょうか? それとも「操作性は多少変わっても、保持と先頭表示を両立したい」方向でしょうか。
(私)
もういいです
