[[20211116132001]] 『ボタンでプルダウンの次の項目にしたい。』(SASIO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ボタンでプルダウンの次の項目にしたい。』(SASIO)

テレビのリモコンの選局のように、
ボタンを作り、次(or前)を押すと、プルダウンの次(or前)にする方法
いらっしゃいましたら返信お願いします。

< 使用 Excel:Office365、使用 OS:Windows8 >


プルダウンってなんやねん?
はっきりせい。
(にばら) 2021/11/16(火) 13:49

http://www.tnktax.com/blog/page_428/
(トロンボーン) 2021/11/16(火) 13:54

 >テレビのリモコンの選局

 テレビの番組表のことか?
 だとしたら、右側のチャンネルのことか?
 それとも下側の次の番組のことか?

(通りすがり) 2021/11/16(火) 14:12


通りすがりさん、
例えば、今3chがついていてリモコンの選局(Λ)を押すと、2chになるといった感じです。
(SASIO) 2021/11/16(火) 15:26

 プルダウン(入力規則?)とボタンを使用するのなら、マクロ使用になります
スピンボタンを使用すればリンクセルを
INDEX関数の行番号にすれば出来ると思います
(プルダウン不使用)
(どん) 2021/11/16(火) 15:42

シートにデータベースを用意しておき、
リストボックスやコンボボックスを使
用し、スピンボタンで表示するデータ
ベースの列を変える、という方法があ
ります。
(通りすがり) 2021/11/16(火) 19:01

 >ボタンを作り、次(or前)を押すと、プルダウンの次(or前)にする方法
 プルダウンとは入力規則のリストの事ですね?

 Sub 前へ()
    Dim v As Variant, i As Long

    With ActiveCell
        If Left(.Validation.Formula1, 1) = "=" Then
            v = Application.Transpose(Range(.Validation.Formula1))
        Else
            v = Split(.Validation.Formula1, ",")
        End If
        For i = LBound(v) + 1 To UBound(v)
            If .Value = v(i) Then
                .Value = v(i - 1)
                Exit For
            End If
        Next
    End With
 End Sub

 Sub 次へ()
    Dim v As Variant, i As Long

    With ActiveCell
        If Left(.Validation.Formula1, 1) = "=" Then
            v = Application.Transpose(Range(.Validation.Formula1))
        Else
            v = Split(.Validation.Formula1, ",")
        End If
        For i = LBound(v) To UBound(v) - 1
            If .Value = v(i) Then
                .Value = v(i + 1)
                Exit For
            End If
        Next
    End With
 End Sub

 With ActiveCell には、入力規則が設定しているセルを記述してください。

 例) With Range("A10")

(ピンク) 2021/11/16(火) 22:52


ピンクさん、長文ありがとうございます。

各1行目の 【Sub 前へ()】・【Sub 次へ()】 日本語の部分ですが、
ボタンの名前と一致していればいいんですよね?
各4行目の【With ActiveCell】の部分ですが、A10セルであれば
With Range("A10")と入れるんですか? With ActiveCellの後ろに入れるんですか?

夜分遅くすみません。
(SASIO) 2021/11/16(火) 23:59


 >各1行目の 【Sub 前へ()】・【Sub 次へ()】 日本語の部分ですが、
 >日本語の部分ですが、ボタンの名前と一致していればいいんですよね? 

 ボタンの名前は、問いません [前へ]の動作をするのなら、
 ボタンを右クリック ⇒ マクロの登録 ⇒ 表示された一覧より[前へ]を
 選択して[OK]ボタンを押してください。

 >With Range("A10")と入れるんですか?

  Sub 前へ()
    Dim v As Variant, i As Long

    With Range("A10")
        If Left(.Validation.Formula1, 1) = "=" Then
            v = Application.Transpose(Range(.Validation.Formula1))
        Else

 です
(ピンク) 2021/11/17(水) 00:37

横からですが、コード拝見しました。
労作であることは確かで、手法そのものは興味を引くものですが、
私には「出発点がいかがなものか」という気がします。

仮に10項目あったとして、
最後の項目を選択しようとしたとき、
10回、次へをクリックすることが適切とはとても思えません。

普通にドロップダウンで、全項目表示して、マウスで一回クリックするのが早いでしょう。
次に進むことも前に戻ることも、Excelの機能をそのまま使うのが最適なように思うのですが、
質問者さんはいかがお考えでしょうか。

(γ) 2021/11/17(水) 00:59


『『ボタンでドロップダウンの次の項目にしたい... [20211116132001]改』
という追加質問があったのですか。読んでいなかったですね。
どうして、こちらに追記しなかったのですか?
すべての投稿を読んでいるわけでもないので、
追記があっても読み飛ばされる可能性はかなりありますよ。
是非、質問はまとめてほしいですね。

入力規則セルの値が変化すると、アクティブシートが変わるのですか。
しかも、順番に処理していくなら必要性はあるかもしれませんね。
それなら、次のシートを選択とか、前のシートを選択とか
直接的に実行したほうが早くないですか?
Activesheet.Next.Select
とか、
Activesheet.Previous.Select
とかを、クイックアクセスツールバーにでも登録しておけば済むのでは?
(γ) 2021/11/17(水) 09:34


[20211116132001]改

一言メッセージを入れておいてください。

(PP) 2021/11/17(水) 11:15


もしプルダウンのリストをどこかのセルを参照していた場合、こんなこともできます。
(プルダウンはできなくなります)

1.シートのどこかにフォームコントロールのスピンボタンを置く
2.スピンボタンを右クリックして書式設定を選び、
 「コントロール」タブの最大値を、リストの最大値に合わせる(最小値は1)
 「リンクするセル」はスピンボタンを置いたセルに設定し、必要であれば文字色を背景色と同じにして文字を見えなくする
3.A2セルの入力規則をやめて、数式「=INDEX(名前リスト,スピンボタンとリンクするセル)」を入力

これで、スピンボタンに合わせて変化するリストの値が得られます。

※▲で数値が上がり、▼で数値が下がります。逆の変化にしたい場合はINDEX関数の第2引数を工夫してください。)
(きまぐれおじさん) 2021/11/17(水) 15:33


回答していただいた皆様、ありがとうございました。
(SASIO) 2021/11/17(水) 23:36

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.