[Excel] How to create a multiple selection pulldown

Поделиться
HTML-код
  • Опубликовано: 2 дек 2024

Комментарии • 10

  • @ta-gw1fv
    @ta-gw1fv 3 месяца назад +1

    めちゃめちゃ参考になりました!
    これで仕事がもっと効率よくできるようになります!
    ありがとうございます!

    • @sum3311
      @sum3311  3 месяца назад

      コメントありがとうございます!
      お役に立てて良かったです。

  • @mmmsmymh
    @mmmsmymh 9 месяцев назад +1

    動画ありがとうござます。
    作ったのですが下の行にオートフィル出来得ないでしょうかq

    • @sum3311
      @sum3311  9 месяцев назад

      リストの元になるセルが増えたらリストボックスも自動的に増える、という事でしょうか?
      もしそうでしたら、名前の定義でセル範囲を指定することでできます。
      今回の例の場合で、シート名がSheet1でしたら
      =OFFSET(Sheet1!$E$3,0,0,COUNTA(Sheet1!$E:$E)-1)
      と名前の定義で登録して、その名前をリストボックスのListFillRangeに入力すると、元のセル範囲に連動してリストが拡張します。

  • @kokuboshota
    @kokuboshota 8 месяцев назад +1

    動画とても参考になりました。
    質問なのですが今回の様なプルダウンリストを複数のセルに適応しようと思った場合、都度動画手順のように追加したいセルをVBA内で選択して増やしていくしかないでしょうか。
    素人の為解決方法が思いつきません。もしよろしかったら回答お願いします。

    • @sum3311
      @sum3311  8 месяцев назад +1

      コメントありがとうございます。
      色々試してみましたら、こんな感じでできそうでした。
      1.プルダウンのボタンの画像名を「ボタンB2」「ボタンB7」など、「ボタン」+対象のセル名にする
      2.「リスト表示非表示」プロシージャーの先頭に以下を追加
      Dim 対象セル As String
      対象セル = Replace(Application.Caller, "ボタン", "") '(a)
      ActiveSheet.Shapes("リスト").Top = Range(対象セル).Top + Range(対象セル).Height '(b)
      Range("A1").Value = 対象セル '(c)
      3.「セルの値表示」プロシージャーの
      Range("B2").Value = セルの値

      Range(Range("A1").Value).Value = セルの値
      に変更
      その他、Range("B2")となっているところを Range(Range("A1").Value) に変更
      (a) Application.CallerでVBAの呼び出し元のオブジェクト名を取得できますので、
      そのオブジェクト名にB2、B7など対象のセル名を仕込んでおく所がポイントです。
      (b) そしてActiveSheet.Shapes("リスト").Topでリストの位置を対象のセルの下に移動させています。
      (c) 対象のセル名をA1セルに保存しておき、以降の処理でそちらをもとにセルの値を変えています。
      わかりやすくA1にしましたが、実際にするときは遠くの非表示セルなどにしてください。
      コメントが長くならないように縦方向だけ対応してみましたが、
      リストのLeftなどを指定すると、横方向へのコピーにも対応できそうです。
      リストのListFillRangeを変えてリストの内容を変えることもできますが、
      若干動作が不安定でしたので、リストを変えるときは別のリストボックスを用意したほうが良いかもしれません。
      ・・・かえって面倒になってしまったかもしれませんが、
      適応させるセルがたくさんの場合は効率が良いかもしれませんので、お試しくださいね。

    • @kokuboshota
      @kokuboshota 8 месяцев назад +1

      @@sum3311 お世話になっています。
      試してみた所、無事望むような動きになりました。ありがとうございます。
      ただ
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Address = "$B$3" Then
      ActiveSheet.Shapes("ボタン").Visible = True
      Else
      ActiveSheet.Shapes("ボタン").Visible = False
      End If
      のボタンの表示非表示がどのように書き換えればいいか分かりません。
      自分でも調べてみたのですがいまいちうまくいかなかったのでよろしければ回答いただけるとありがたいです。

    • @sum3311
      @sum3311  8 месяцев назад

      お試しいただけて良かったです。
      SelectionChangeの部分は、ボタンを表示したままで良ければ
      プロシージャーごと削除してしまえば簡単ですが
      対象のセルを選択したときだけそのボタンを表示したい、であれば
      こちらでできると思います。
      お試しくださいね。
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim shp As Shape
      Dim w As String
      w = Replace(Target.Address, "$", "") '$を除いて「B2」や「B7」にしています
      For Each shp In ActiveSheet.Shapes
      If shp.Name = "ボタン" & w Then
      '「ボタン」+選択されたセルの場合は表示します
      shp.Visible = True
      ElseIf Left(shp.Name, 3) = "ボタン" Then
      'それ以外の「ボタン」で始まる画像は非表示です
      shp.Visible = False
      End If
      Next
      End Sub

  • @おゆ-i6j
    @おゆ-i6j 5 месяцев назад +1

    こんばんわ。こちら無料エクセルでは出来ないですよね?

    • @sum3311
      @sum3311  5 месяцев назад +1

      無料版のExcelはマクロが使えなかったと思いますので
      残念ながら今回の方法では出来ないと思います・・・