こんにちは。お邪魔します。
"簡単な"というのが、設定が簡単という意味でしたらば、
[データの入力規則]の[リスト]に勝るものはないです。
リストに表示される"文字が小さすぎて"、ということでしたらば、
[ActiveXコントロール]の[リスト ボックス]を活用する方法も
比較的簡単です。
ただ、各種ドロップダウンリストの場合、リスト内容が47点ともなると、
探すのに迷ったり、選択するのに手間が掛かったりして
能率的と呼べるようなものにはなりません。
"簡単な"とか"文字が小さすぎて"というのは、
ここら辺の含みを仰ってるのかな?と思った次第です。
"簡単な"というのが、入力作業を効率化する、という意味だった場合の話を書いてみます。
# そうでない場合は以下読まなくてもいいです。
設定する作業は難しくなりますが、VBAを活用する方法です。
添付画像とVBAサンプルコードで示した、
コマンドバーのポップアップメニューを用いる方法。
サンプルでは、(仮に)C3:C12 をダブルクリックした場合、
添付画像のように階層化されたポップアップが表示されます。
一覧に近い形で視認し易いのが特長です。
区分を工夫すれば、より扱い易くなります。
例えばキーボードで操作する場合の最大(平均)ストローク数や、、
視認し易さ、リテイクのし易さ、等を基準に考えて
適切なツールを選んで工夫すればいいと思います。
提示したサンプルは発展系があって、
ユーザーフォームを組み合わせて、
T → 千葉 東京 徳島 栃木 鳥取 富山
O → 東京 徳島 栃木 鳥取 富山
Y → 富山
のような感じで、
キーボードストロークに連続的に応じた予測変換リストをポップアップする
ようにして、さらなる省手数化も可能です。
一応、閲覧されている方にも、こちらの意図が伝わるようにサンプルコードあげておきます。
Excelの習熟が進まなければ扱えないでしょうけれど、
一応、Excelの可能性だけは紹介しておこうと思いました。
もし、興味を持たれて試してみたいとか思ったならば相談してみてください。
' ' ===========標準モジュール============
Option Explicit ' Re8265860
Option Private Module
Const fCmdBName = "PopupTree都道府県"
Const fOnAct = "RcvCmd都道府県"
Const f9D47P = "北海道" & _
";" & "東北 青森 岩手 宮城 秋田 山形 福島" & _
";" & "関東 茨城 栃木 群馬 埼玉 千葉 東京 神奈川" & _
";" & "中部 新潟 富山 石川 福井 山梨 長野 岐阜 静岡 愛知" & _
";" & "近畿 三重 滋賀 京都 大阪 兵庫 奈良 和歌山" & _
";" & "中国 鳥取 島根 岡山 広島 山口" & _
";" & "四国 徳島 香川 愛媛 高知" & _
";" & "九州 福岡 佐賀 長崎 熊本 大分 宮崎 鹿児島" & _
";" & "沖縄"
Sub myポップアップメニュー設定()
Dim v
Dim sArrD() As String
Dim sArrP() As String
Dim nChildren As Long
Dim i As Long
On Error Resume Next
Application.CommandBars(fCmdBName).Delete
On Error GoTo 0
sArrD() = Split(f9D47P, ";")
With Application.CommandBars.Add(fCmdBName, msoBarPopup, , True)
For Each v In sArrD()
sArrP() = Split(v)
nChildren = UBound(sArrP)
If nChildren = 0 Then
With .Controls.Add(msoControlButton)
.Caption = sArrP(0)
.OnAction = fOnAct
End With
Else
With .Controls.Add(msoControlPopup)
.Caption = sArrP(0)
For i = 1 To nChildren
With .Controls.Add(msoControlButton)
.Caption = sArrP(i)
.OnAction = fOnAct
End With
Next i
End With
End If
Next
End With
MsgBox "ポップアップメニュー" & vbLf & "'" & fCmdBName & "'" & _
vbLf & "を設定しました。", vbInformation
End Sub
Sub myポップアップメニュー削除()
On Error Resume Next
Application.CommandBars(fCmdBName).Delete
If Err Then
MsgBox "ポップアップメニュー" & vbLf & "'" & fCmdBName & "'" & _
vbLf & "は存在しません。", vbInformation
Else
MsgBox "ポップアップメニュー" & vbLf & "'" & fCmdBName & "'" & _
vbLf & "を削除しました。", vbInformation
End If
End Sub
Sub RcvCmd都道府県()
With ActiveCell
.Value = Application.CommandBars.ActionControl.Caption
.Next.Activate
End With
End Sub
Sub Auto_Open()
Call myポップアップメニュー設定
End Sub
' ' ==============================
' ' ===========シートモジュール===========
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Range("C3:C12"), Target) Is Nothing Then Exit Sub
Cancel = True
Application.CommandBars("PopupTree都道府県").ShowPopup
End Sub
' ' ==============================