• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • ACCESSのコンボボックスについて

    ACCESSのコンボボックスに「012/015/028/125」等が設定されているて、 コンボボックスのプロパティの「入力チェック」は「はい」の設定になっております。 そういった場合、「12」と入力した場合、「012」とすることは可能でしょうか? テキストボックスの場合には、そのテキストボックスの更新後処理で Me.コード = Format(Me.コード, "000") のように記述し変更していたのですが・・・。 コンボボックスでは、「指定した値はリストにありません」と表示され、更新後処理がが実行されません。

  • コンボボックスのリスト表示について

    ユーザーフォーム上でコンボボックスを作成しました。 リストの元となるデータがあるセル範囲に名前を付け、 コンボボックスのRowSourceにその名前を入れてリストにしています。 リストを変更するときにはデータを作り変え、マクロでそのセル範囲に名前を付け替えるようにしています。 問題は前のリストの数が3つだったとし、次にリストの数を5つになるように作り変えた時にコンボボックスの表示が上3つまでしか表示されないのです。 リストのスクロールもできない状態です。 Visual Basicの画面でコンボボックスをいじったら直っています。 名前のセル範囲、データの変更はきちんと反映しています。 List Rows等のプロパティをいじってみても直りません。 どこを設定しなおせばいいのでしょうか。OSはMe、Excel2000です。

  • エクセル マクロ コンボボックスリスト

    sheet1の場所でボタンクリックでフォーム表示。その中でコンボボックスリストを作成。 sheet3にデーターをA列に作りました。 1)フォームの中のコンボボックスをクリックしてリスト表示させた い。マクロの記述を教えてください。 2)コンボボックスリストに表示した文字をsheet2に記録するボタンを作ったがマクロの記述を教えてください。

  • エクセル、フォームでのVBAについて(コンボボックス)

    エクセル97でフォームのコンボボックスを使用する場合の質問です。 ワークシートにコンボボックスを10個配置しました。 入力範囲はすべて同じです。 このコンボボックスで特定の項目(入力範囲6番目)を選んだ場合、次のマクロを実行するようにしようと思っています。マクロを10個書いてそれぞれのコンボボックスに登録してもいいのですが、それよりはどのコンボボックスが使用されたか特定できればすべてのコンボボックスに一つのマクロで対応できます。 コンボボックスに番号(たとえばコンボ1~コンボ10)を振ってその番号の取得ができればいいのですが、どのように記述したらよいのか検討がつきません。 お教えください。

  • コンボボックス_データ抽出

    コンボボックスを使用し、<全台帳>から、自分の担当分の必要データのみ抽出し、新たに<一覧表>を作成したいと考えています。 ≪エクセルの状態≫ ・Sheet1 <メニュー欄>(表紙になっています) ・Sheet2 <全台帳>  部署全体の注文アイテム情報があります。      このデータは、毎日自動更新されるようにすでにマクロが組まれています。(行が日々変更します) ・Sheet3 <自分の一覧表>      今回作りたいものです。 ≪Sheet2と3の説明≫ ・Sheet2のデータは、下記のようなものが横に一列に並んでいます。 [入力日][注文番号][客先][品名][数量][納期][送り先]など物凄いたくさんの情報が部署全員分あります。 ・Sheet3には、[注文番号(唯一これが自分の分とわかるものです)]からデータを引っ張ってきて、その分の[客先][品名][数量]データのみ一緒に引っ張ってきてほしいのです。 ≪作りたいマクロ≫ 【1】Sheet1のメニュー欄にマクロボタンを作り、それをクリックすると、ユーザーフォーム(コンボボックス)が表示されます。 (表示場所は、Sheet1でも3でもかまいません。) 【2】コンボボックスは、Sheet2にリンクしてあり、[注文番号(直接入力は不可)]から自分の担当分を選ぶ。 【3】ユーザーフォーム上で、<登録ボタン(コマンドボタン?)>を押す。 【4】Sheet3に、[注文番号]とその分の[客先][品名][数量]のみ一緒に引っ張られてくる。 注文が入るたびに、この作業をするため、Sheet3は最終行に追加されるかたちにします。 この様なマクロの組み方を、教えてください。 よろしくお願いいたします。

  • Excel コンボボックスについて

    現在ブックに"Sheet1" "Sheet2"が存在していて、 Sheet1にコンボボックス用のリスト一覧を作成して、 Sheet2にSheet1のリスト一覧を参照してコンボボックスを作成したいのです。 リストは、動的に変化できるようにA1~A65536まで使用できるようにしたい場合どのように、コードを作成すればよいのでしょうか。。。

  • コンボボックスの参照先(ListFillRange)が反映されない

     「Excelで使うMySQL活用ガイド」という本のサンプルプログラム(付属CD-ROMより)で、顧客と商品を追加した直後に、そのデータ(それぞれ別ワークシートにある)を用いて売上を追加あるいは修正しようとするとコンボボックスにそのデータがリストされません。  コンボボックスの参照先(商品一覧、顧客一覧)を確認すると、ちゃんと新しいデータを含む範囲が含まれて指定されています。  つまり、別ワークシートにあるデータの2列をコンボボックスにリストさせて、選択したものをセルに入れようとしているときに、範囲指定が正しいにもかかわらず、すべての範囲がコンボボックスにリストされない、という問題です。  一度、ブックを閉じて再び開くとコンボボックスにすべてのデータがリストされます。  原因をご存知の方は教えていただければ助かります。なお、Excelのバージョンは2000です。

  • コンボボックスのイベント 更新後処理をしたい

    VB.NETのテキストボックス、コンボボックスで アクセスのAfterUpdate(更新後処理)と同じ動きをするイベントはどれですか? 「TextChanged」を使うと 例えばテキストボックスに「あいう」の「う」を打ち終わってから実行したいのに 「あ」を入力するだけで実行されてしまいます。 「あいう」と入力し終わってから実行するイベントはどれでしょうか? よろしくお願い致します。

  • シート上のコンボボックスの使い方

    シート上のコンボボックスの使い方 現在作っている物があるのですが、色々と調べてはみるものの解決出来なくて困っています。 ☆やりたいこと シート1 コンボボックスA コンボボックスB コンボボックスC 一覧表(A1~A16)の枠だけが書かれているもの コンボボックスA・・・青森 秋田 岩手 コンボボックスB・・・100 200 300 コンボボックスC・・・北 東 西 南 シート2 コンボボックスAとBとCの選択されたものによって選ばれる一覧表(例A1~E16)のデータ ☆シート1にてコンボボックスを3種類選択した時に、シート1枠だけの一覧表にシート2のデータが表示される! ということがやりたいです。 説明がアバウトすぎて申し訳ありませんが、初心者なりに色々やった結果が惨敗に終わっている状態です。 皆様のお力を貸していただきたく思います。

  • VBAマクロのコンボボックス 続き 3

    ほんとうに助かっております。 ここに質問するということはネットでみつけきれなかったということでご了承ください。 コンボボックスの設置場所はユーザフォームではなくワークシート上です。 ちなみにverはExcel2003です。 コンボボックスの性質といいますか、あるセルの値をみてリストに値を表示するかしないかを行いたいです。 しかし、すぐには反映されず一度動作(オブジェクト実行)させないと値の反映が行われません。 セルの値が変わると即座にコンボボックスリスト内の値の有無が反映させる方法を教えてください。 よろしくお願いいたします。

専門家に質問してみよう