エクセルの複数選択リストボックス

エクセルで、
「リストから複数のデータを選択したら、そのままセルに記入される。」
そういう仕組みを作りたい、と生徒さんから質問がありました。

「データ」タブ→「データの入力規則」→「リスト」では、
1つしか選択できません。

残念ながら、ご希望の仕組みは、マクロを使わないとできません。
生徒さんには、
「複数のセルでデータを選んで、それを数式で結合する。」
という方法で、納得していただきました。

 

せっかくなので、
「リストから複数のデータを選択したら、そのままセルに記入される。」
という仕組みを、作ってみました。
Image 001
エクセルファイルは、こちらからダウンロードできます。
興味のあるかたは、自由に書き換えて使ってみてください。

 

マクロの内容は、こんな感じ。

まずは、ワークシートで入力セルを選択すると、フォームが出るように設定。
Image 002

ユーザーフォームを作成して、コマンドボタンを配置。
コマンドボタンがクリックされたら、選択内容をセルに書き込ませる。
Image 003

 

(2019/5/16追記)
「エクセルの複数選択リストボックス(2)」は、こちらです。

(2019/10/10追記)
「エクセルの複数選択リストボックス(3)」は、こちらです。

 

 

41 thoughts on “エクセルの複数選択リストボックス

  1. 「都道府県」シートの内容を変えるだけです。

    「店舗一覧」などのように、リストウィンドウのタイトルなども変えたいときは、
    ちょっとめんどうですが・・・
    1.どこかに店舗名一覧を入力し、「店舗リスト」など新しい範囲名をつける。
    2.VBEを起動(Alt+F11キー)し、「UserForm1」を開き、
    3.タイトル(caption)やリスト情報(RowSource)を変更する。
    ・・・で、できます。

    「VBEって、なに?」っていう場合は、修正はむずかしいかもしれません。

  2. はじめまして。

    複数リストをコピーさせていただきました。
    とても便利で助かっています。

    B列のセルを選択するとリストが表示されますが、
    C列にもリストを表示されるにはどのようにすればよろしいでしょうか?
    新たなユーザーフォームを作成して、選択したいリストは
    作成しましたが、リストの表示ができません。

    よろしければ、同じシートの2列それぞれ別のリストを表示させ、
    選択できるようにするコード記述を教えてください。

  3. 回答、遅くなりすみません。

    VBEを起動して、下図のようなコードとユーザーフォームは表示できますか。
    http://noryyasuda.webcrow.jp/temp/image.jpg
    ・C列に表示したいリストをどこかのシートに作成して、範囲名を付ける。
    ・UserForm1と同様に、UserForm2を作成する。
    ・「アンケート」シートに、同様のコードを足してあげる。
    という手順でできるはずです。

    1. こんにちは。

      こちらこそお返事が遅くなりすみませんでした。

      ご丁寧にありがとうございます!
      お陰様で、意図していた通りに設定出来ました!

      本当にありがとうございました。
      少しずつ勉強しようと思います。
      今後も参考にさせていただきます。

      milk

  4. こんにちは。
    複数リストをコピーさせていただきました。
    とても便利で感動しました。

    B列のセルを選択するとリストが表示されますが、
    C列以降D~AF列(1か月31日分)まで各々の列でリストを表示されるにはどのようにすればよろしいでしょうか?

    Excelまだまだ修行中の段階です。

    1. コメント、ありがとうございます。

      リストボックスの複数選択って、ニーズあるんですね。
      ここであれこれ書くとややこしくなっちゃうので、
      近日中に「エクセルの複数選択リストボックス(2)」記事で説明しますね。

  5. はじめまして。

    マクロ初心者です。(未経験者です)
    リストボックスの複数選択が自力ではわからず、
    ファイルをダウンロードさせていただきました。

    B列選択するとリストが表示されますが、C列で表示させたい場合、
    コードを”B列”を”C列”に書き換えただけでは、だめなのでしょうか?
    どうしたらできるのでしょうか?

    ご回答いただければ幸いです。

    1. エクセルの複数選択リストボックス(2)の記事を見て、
      変更することができました!

      ありがとうございました。

  6. はじめまして。

    マクロ初心者なのですが、教えてください。
    リストボックスの中から選択したのものをセルに記入させる
    の後、記入させた文字を活かして内容を一部修正したい場合(選択肢を変更したい場合)
    最初から選択をし直すほかに何か方法はないでしょうか?
    例えばですが、それぞれのセルでリストボックスの選択項目を記憶させておくなどは
    難しいですか?

    1. コメント、ありがとうございます。

      入力されている内容を一部修正する方法ですが・・・
      いちばん簡単なのは、
      (1)修正したいセルを選択
      (2)フォームが表示されるので、右上の「×」で閉じる
      (3)ふつうに、セルの内容を書き換える
      という方法です。
      リストにない項目でも、自由に書き加えられます。

      たぶん、こういう答えは、期待されていないですよね^^;
      もう1つは、コマンドボタンのコードを表示して、
      「 Dim 選択内容 As String」の次の行に
      「選択内容 = Selection.Value」を入れます。
      そうするとたとえば、「東京都,」と入力されているセルを選択し直して、
      フォームから「神奈川県」を選ぶと、「東京都,神奈川県,」と追記されます。

      期待されている答えは、
      「すでに入力されているセルを選択すると、フォームで入力内容が選択されている状態になっている」
      という形だと思います。
      できそうな気もするのですが、眠いので、明日以降調べてみますね。

      1. ありがとうございます!
        おっしゃる通りで、一番最後の内容が本来の希望動作であります!

        3名の異なるユーザーが書き換えることがあり、一部修正する際に
        それができたらなんて便利なマクロなのだろうかと考えた次第でございます。
        自身でも勉強してみているところですが、もしお分かりになるようでしたら
        ご教示いただけますと大変助かります!!!

      1. 「わかりません」で逃げないでくださってありがとうございます!!
        マクロ拝見いたしました。
        素晴らしいですね~!とても感動しました~!!
        ”面白かった”といえるように、これを機に自分でも学んでみます。
        この度はご解答ありがとうございました!!

    2. はじめまして。
      こちらの複数選択リストボックスを参考に作らせていただいてます。
      まだまだVBA勉強中でわからないことだらけなので大変参考になっております。

      質問で恐縮なのですが、
      ユーザーフォームのリストボックスで選択(クリック)した順にセルに挿入することは可能でしょうか?複数選択するとリスト掲載順にセルに挿入されますが、それをクリックした順にしたいのです。

      また、2回クリックしたら同じものを2こセルに挿入も可能でしょうか?(神奈川県を2回クリックしたらセルに神奈川県,神奈川県となる感じです。)

      質問ばかりで恐縮ですが、返答いただけたら嬉しいです。

      1. コメント、ありがとうございます。
        「フォームを使うことが前提」になりますか?
        「フォームを使わなくても、選択するだけで入力できればOK」でしょうか。

      2. フォームをつかわなくても、選択するだけで入力できるならOKです!

        よろしくお願い致します。

  7. はじめまして。
    こちらの複数選択リストボックスを参考に作らせていただいてます。
    初歩的な質問で申し訳ありません。
     
    都道府県のリストを自分用に変更して反映させたいと思っています。
    都道府県だと48列目までデータ範囲があると思いますが、私の場合は160列目までデータがあります。
    入力しましたが、反映されるリストボックスは48個目までしか反映されません。
    ここのデータ選択範囲はどのように変更するのでしょうか?
     
    宜しくお願いいたします。

    1. コメントありがとうございます。
      お返事、遅くなってすみません。

      リストに表示される範囲は、「都道府県リスト」と範囲名をつけているだけです。
      ですので、その範囲名の範囲を修正すれば、リスト表示範囲はいくらでも多くできます。

      手順は・・・
      「数式」タブ→「名前の管理」で、「都道府県リスト」を選んで「編集」。
      そこで、参照範囲が48行目までになっていますが、自由に増やしてください。

  8. 参考にさせていただきました。
    ありがとうございます。
    ただ、実行時エラー1004が出てしまいます。
    range メソッドが失敗してしまいます。
    原因は何でしょうか?

    1. コメント、ありがとうございます。
      エラーが出る環境を、詳しく説明いただけるとわかるかもしれません。
      A:ファイルを何も書き換えないのに、エラーになりますか。
      その場合は、別PCで試していただくとできるかもしれません。
      B:ファイルを書き換えた場合、どのように書き換えたのかがわかると、エラーの原因が特定できるかもしれません。

      1. 早期の返信ありがとうございます。
        自分でオブジェクト名を変更しておりオブジェクトを指定するためのエクスクラメーションが抜けていました!
        解決しました。
        お騒がせしてすいませんでした。

  9. 参考にさせていただきました!
    基本的に痒いところに手は届いたのですが、1項目を選択した場合及び選択項目の最後の”,”を表示させない方法はありますか?
    長文ですいません。

    1. コメント、ありがとうございます。
      選択内容を入力するときに、最後の「,」を削除するコードを入れればOKです。

      具体的なやりかたは、たとえば・・・
      VBEを開いて、UserForm1のコマンドボタン「OK」をダブルクリックすると、「OK」ボタンを押したときのコードが表示されます。

      For i = 0 To ListBox1.ListCount – 1
      If ListBox1.Selected(i) = True Then
      選択内容 = 選択内容 & ListBox1.List(i) & “,”
      End If
      Next i

      のうしろに

      If 選択内容 <> “” Then
      選択内容 = Left(選択内容, Len(選択内容) – 1)
      End If

      を書き加えるなど。

      1. 早期の対応ありがとうございます!
        上手くいきました!

  10. はじめまして。
    わからない事がありまして、相談がございます。
    A列の内容によって、B列のリストを変える事は出来ますでしょうか。
    例えばA列を地域に分けて選択式にして、B列はその中に入る都道府県を複数選択など。
    関東→東京、神奈川、など
    自分で考えても全然わからず、ご教授頂けますと幸いです。
    よろしくお願いいたします。

    1. 興味深い課題を、ありがとうございます。
      たしかに、そういうニーズはありますよね。
      たぶん、できそうな気がします。
      近日中に試してみますね。
      少々、お待ち下さい。

      1. ご対応ありがとうございます。
        まさしく求めていた感じです。本当にありがとうございます。

  11. はじめまして。
    VBA初心者ですが、記事を参考に勉強させてもらってます。
    アドバイスを頂きたいのですが、、、

    B列のセルをクリックするとフォームが開きますが、その時「OK」や「×」を押さず、他のセルをクリックしたらフォームをキャンセルできるようにできますか?

    どうかよろしくお願い致します。

      1. ご返答ありがとうございます。
        残念ですがうっかりセルを選択してしまった時は、ちゃんと「×」を押します。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)