• ベストアンサー

入力規則のリスト表示

入力規則でリストを作りましたが、プルダウンウインドウが8行しか表示されません。ウインドウの幅を変更する方法は良くあるようですが、縦長に20行位1度に表示させておき、あとは▲▼で動かせて選択できるようにしたいのですが、初心者にもわかるように教えてください。

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

  • ベストアンサー
  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

入力規則のリストボックスでは表示行数を変更することができません。 ご希望の結果を得るにはワークシートにリストボックスを貼り付けマクロで制御する方法があります。 Worksheet_SelectionCangeイベントで選択セルが指定のセル範囲内だった場合にリストボックスを表示する リストボックスのChangeイベントでセルにリストボックスの値を格納するという流れになります。 下のサンプルはB列を選択するとA列のリストがリストボックスで表示される、と言うものです。 [準備] Sheet1のA1からA30まで1から30の数字が連続で入力され コントロールツールボックスからリストボックスを貼り付け、オブジェクト名をMyList、ListFillRangeにA1:A30、VisibleをFalseに設定します。 ListRowsを20にするとリストの表示件数を20に変更できます。 VisualBasicEditorを起動、Sheet1を選択しコードの表示し下のコードを貼り付けます Dim LastSelect As Object '最後に選択されたセル Dim MacroFlg As Boolean 'リストボックスの値がマクロによって変更されたかを判定 Private Sub MyList_Change() If Me.MyList.Value <> "" Then LastSelect.Value = Me.MyList.Value End If If Not MacroFlg Then Me.MyList.Visible = False Else MacroFlg = True End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Me.MyList .Visible = False 'セル選択した場合はリストボックスを非表示 If Target.Rows.Count = 1 And Target.Columns.Count = 1 Then '単一セルの場合だけ処理 If Target.Column = Columns("B").Column Then '指定の列の場合だけ処理 Set LastSelect = Target '選択されたセルを記憶 If IsEmpty(Target.Value) Then MacroFlg = True 'リストボックスの値を変更するのでChangeイベントを抑制 .Value = "" Else MacroFlg = True 'リストボックスの値を変更するのでChangeイベントを抑制 On Error Resume Next .Value = Target.Value '選択されたセルの値をリストボックスに格納 If Err.Number <> 0 Then .Value = "" '何らかのエラーが発生したらリストボックスの値はNULL End If On Error GoTo 0 End If 'リストボックスの表示位置を変更 .Visible = True 'リストボックスの表示 .Top = Target.Top .Left = Target.Left .Width = Target.Width + 15 End If End If End With End Sub エラーはないと思いますが、お試しください。

tyorojyunn
質問者

お礼

大変参考になりました、有難う御座いました。

すると、全ての回答が全文表示されます。

関連するQ&A