• ベストアンサー

コンボボックスに表示するデータをマクロで処理したい

EXCEL2000を使っています。 sheet1にある一覧表のデータをsheet2のコンボボックスの入力範囲として使っています。 コンボボックスですが、実際にはリストボックスとしてしか利用していません。 現在は、sheet1の一覧表が更新されるたびに、手作業で入力範囲を修正していましたが、これをマクロで処理する方法はないでしょうか? 例えば、sheet2がアクティブになった時にマクロが自動実行し、入力範囲が変更されれば完璧です。 どなたか、アドバイスお願い致します。

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

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

Sheet2のComboBox1のMouseDownイベントプロセジュアとして Private Sub ComboBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) d = Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count f = Trim(Str(d)) Sheet2.ComboBox1.ListFillRange = "sheet1!a1:a" & f End Sub として見ました。 Sheet1のA列の最下行を増やしたり減らしたりすると、その後にコンボのリストがクリックするごとに増減していることを確認しました。 d = Worksheets("sheet1").Range("A1").・・のA1は 最初行に合わせて変えること。

terakura
質問者

お礼

本当です!できました!ありがとうございました。 自分には絶対書けません・・・。もっと勉強します。本当にありがとうございました。

その他の回答 (2)

  • TTak
  • ベストアンサー率52% (206/389)
回答No.3

リストの範囲が最下行までと決まっている場合次のイベントプロシージャでいけると思われます。ただ、リスト範囲の列数と最上行数は指定してください。 Private Sub Worksheet_Activate() Dim mycul As Integer '<-リスト範囲の列数 Dim myrow1 As Integer '<-リスト範囲の最上行数 Dim myrow2 As Integer '<-リスト範囲の最下行数 mycul = 1 '<-リスト範囲の列数を指定(1はA列,2はB列...) myrow1 = 2 '<-リスト範囲の最上行を指定 myrow2 = Range(Sheets("Sheet1").Cells(Rows.Count, mycul).End(xlUp).Address).Row ComboBox1.ListFillRange = _ "Sheet1!" & Range(Cells(myrow1, mycul), Cells(myrow2, mycul)).Address End Sub

terakura
質問者

お礼

2度も回答いただき、本当にありがとうございました。NO2の方と同様にこちらでもうまく動きました。シートに2つコンボボックスがありますので、1つはNO2の方、もう1つをこの書き方で利用させていただきたいと思っております。まだまだ勉強不足で、コメントを書いていただいたのは、本当に助かりました。心よりお礼申し上げます。ありがとうございました。

  • TTak
  • ベストアンサー率52% (206/389)
回答No.1

デザインモードでコンボボックスのプロパティウインドウを表示して、 ListFillRange の値をセル参照にすることが可能です。例えばSheet1のセルA1からA5にリストがある場合、 ListFillRangeの値をSheet1!$A$1:$A$5 とします。マクロを組む必要はありません。 > sheet2がアクティブになった時にマクロが自動実行し、入力範囲が変更されれば完璧です であれば、Sheet2のActivateイベントプロシージャを以下のように記述します。なお、この例ではコンボボックスの名前をComboBox1とします。 Private Sub Worksheet_Activate() ComboBox1.ListFillRange = "Sheet1!$A$1:$A$5" End Sub EXCEL2000で動作確認

terakura
質問者

お礼

回答の補足に入力してしまいました。お礼のところにするべきでした。申し訳ありません。 再度、入力します。 すみません。質問を補足してもよろしいでしょうか?sheet1のリスト範囲が、表が更新される毎に変わってしまうのです。それでも、この方法で出来るのでしょうか?何卒宜しくお願い致します。

terakura
質問者

補足

すみません。質問を補足してもよろしいでしょうか?sheet1のリスト範囲が、表が更新される毎に変わってしまうのです。それでも、この方法で出来るのでしょうか?何卒宜しくお願い致します。

関連するQ&A