[Excel] How to search dropdown

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

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

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

    この動画を見ながら、実際にやってみましたが、とても分かりやすかったです!
    ちなみに、動画内のセルB2をB3、B4・・・と下にコピーしたいのですが、
    FIND関数でB2のみしか選択できないので、うまく出来ませんでした。
    何かいい方法がありますでしょうか?

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

      嬉しいコメントありがとうございます(^^)
      複数のセルに対応するには、それぞれのセルのリストを別々に作る必要があります。
      B2、B3と行方向にコピーすることまで考えますと、例えばK2セルに
      =TRANSPOSE(FILTER($F$2:$F$48,IFERROR(FIND(B2,$I$2:$I$48),FALSE),""))
      と入力して、B2セルの入力規則の「元の値」を「=K2#」に変更、
      B2セルをB3、B4とコピーしたら、K2セルもK3、K4とコピーすれば、それぞれのセルで検索できると思います。
      あとWorksheet_Changeの方も、B3、B4セル対応すれば、より使い勝手が良くなると思いますので、お試しくださいね。

    • @pyonkichi19999
      @pyonkichi19999 2 месяца назад +1

      @@sum3311横にスピルさせられるのですか⁈凄すぎますね

  • @user-tp4imof8y
    @user-tp4imof8y Год назад +1

    I列にまとめてしまうのいいアイデアですね。
    VBAも使えそう。勉強になりました。

    • @sum3311
      @sum3311  Год назад

      ありがとうとざいます!
      とてもうれしいです(*^^*)

  • @shoma19980201
    @shoma19980201 3 месяца назад +1

    b2にプルダウン リストがe2
    b4にプルダウン、リストがg2
    プルダウンまではできるのですが
    vbaの2つのセルのみに対応する打ち方がわかりません。

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

      コメントありがとうございます。
      仮に、
      b2にプルダウン、リストがe2、Filter関数で表示候補の設定がj2
      b4にプルダウン、リストがg2、Filter関数で表示候補の設定がk2
      とすると、以下のようなプログラムで行けるのではないかと思います。
      j列、k列は仮で書いていますので、実際の列に置き換えてみてください。
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address "$B$2" And Target.Address "$B$4" Then
      'B2,B4セルではないので終了
      Exit Sub
      End If
      'ChangeしたのがB2セルで、
      'その値がFilter関数のJ2セルと同じで、
      'J2の下のJ3が値なしなら
      '1つだけに絞れたので、プルダウンは出さずに終了
      '(入力規則のリストの元を =J2# にしている場合)
      If Target.Address = "$B$2" And _
      Target.Value = Range("J2").Value And _
      Range("J3").Value = "" Then
      Exit Sub
      End If
      'ChangeしたのがB2セルで、
      'その値がFilter関数のK2セルと同じで、
      'K2の下のK3が値なしなら
      '1つだけに絞れたので、プルダウンは出さずに終了
      '(入力規則のリストの元を =K2# にしている場合)
      If Target.Address = "$B$4" And _
      Target.Value = Range("K2").Value And _
      Range("K3").Value = "" Then
      Exit Sub
      End If
      'プルダウンを表示
      Target.Select
      SendKeys "%{DOWN}"
      End Sub

  • @pyonkichi19999
    @pyonkichi19999 2 месяца назад +1

    こんにちは、ものすごく内容に感銘を受けて真似してみたのですが、VBAがうまいこと動作しません。
    targetセルの値を確定(enter)をすると本来次のセルがアクティブになるはずが、「select」で元に戻ってalt+下がsendされる、という動作だと思いますが、プルダウンリストが一瞬見えるものの、すぐに消えてしまいます。
    Excel自体の設定が影響しますでしょうか?
    ご教示いただければ幸いです

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

      お試しいただいてうれしいです(^^)
      原因として考えられるのは
      ・入力規則の設定タブで「ドロップダウンリストから選択する」のチェックが外れている
      ・ファイル→オプション→詳細設定の「オブジェクトの表示」が「なし(オブジェクトを表示しない)になっている
      あたりではないかと思います。
      「オブジェクトの表示」は、水平スクロールバーを表示するなどの少し下にあります。
      もしそれらでない場合は
      ・マウスのクリックでプルダウンが表示されるか
      ・セルを選択して、キーボードでAltと下矢印で表示されるか
      などで切り分けができるのではないかと思いますので、お試しくださいね。

  • @sango5598
    @sango5598 3 месяца назад +1

    予測変換プルダウンをA行全てにやりたい場合は入力規則はわかるのですが、VBAのスクリプトはどのようになりますか?

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

      A列の全てで検索をできるようにしたい、という事でしたら
      例えば1行目の場合、K1セルを
      =TRANSPOSE(FILTER($F$2:$F$48,IFERROR(FIND(A1,$I$2:$I$48),FALSE),""))
      にして、A1セルの値を検索した結果を横方向に表示するように設定。
      A1セルの入力規則を =K1# にしてK列を指定。
      A列、K列それぞれを縦方向に必要な行数だけコピーしたら、VBAは
      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim r As String
      If InStr(Target.Address, "$A$") = 0 Then
      'A列でないので終了
      Exit Sub
      End If
      '自分の行取得
      r = Target.Row
      If Target.Value = Range("K" & r).Value And _
      Range("K" & r).Offset(0, 1).Value = "" Then
      'リストから選択したので終了
      '(自分の行のK列が自分のセルと同じで、その右が空白)
      Exit Sub
      End If
      Target.Select
      SendKeys "%{DOWN}"
      End Sub
      こんな感じでいけるのではないかと思います。

  • @智也-m1q
    @智也-m1q 7 месяцев назад +1

    とても有益な情報ありがとうございます。
    このプルダウンを活用したいのですが、
    例えば会社毎にシートが分けられていて、
    A1に会社名、B1に「赤」と入力すると、
    その会社名のシートの中のリストから「赤」が含まれる商品をプルダウンに表示するよう作成するようにするには、どうすればいいのでしょうか?
    わかりにくい文章で申しわけございませんがよろしくお願いします。

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

      コメントありがとうございます(^^)
      会社ごとのシートのA列に商品があるとして、検索するシートのC1セルなどに
      =FILTER(INDIRECT(A1&"!A1:A100"),IFERROR(FIND(B1,INDIRECT(A1&"!A1:A100")),FALSE),"")
      とすると、A1のシート名のシートからB1の文字を検索して、該当する値だけが表示されるようになります。
      あとはB1セルの入力規則をリストにして元の値を「=C1#」、SendKeysなどのVBAを設定すれば、
      シートを切り替えて検索できるようになると思います。
      会社のシートの商品がある範囲をA1:A100としていますが、そこは実際に合わせてご変更くださいね。

    • @智也-m1q
      @智也-m1q 7 месяцев назад +1

      ありがとうございます。
      丁寧な説明でわかりやすいです!
      今度試してみます。