
エクセルVBAでフォームのListboxをスクロールするには?
ワークシート上に貼り付けたリストボックスがあります。
このリストボックスはOLEObjectではなくフォームのリストボックスです。
For Each lb In .ListBoxes
If lb.ListCount <= 4 Then
lb.ListIndex = 1
Else
lb.ListIndex = 16
ここで16番目が見えるようにスクロールしたいのです。
End If
Next lb
このスクロールさせる方法がわかりません。
ご教示いただければ幸いです。
No.3ベストアンサー
- 回答日時:
>手動スクロールの動きが変ですし
失礼。
'-----------------------------------------------------------------
Sub sbChange()
'ListBoxes(1)の表示行数でMXを設定
Const MX As Long = 11
Dim x As Long
With ActiveSheet
x = n - .ScrollBars(1).Value + 1
If x < 1 Or x > MX Then
.ListBoxes(1).ListIndex = 0
Else
.ListBoxes(1).ListIndex = x
End If
End With
End Sub
'-----------------------------------------------------------------
Sub test()
Dim x
x = InputBox("ListIndex")
With ActiveSheet
.ListBoxes(1).ListIndex = 1
.ScrollBars(1).Value = x
n = x
End With
End Sub
'-----------------------------------------------------------------
Sub LbChange()
With ActiveSheet
n = .ListBoxes(1).ListIndex + .ScrollBars(1).Value - 1
End With
End Sub
'-----------------------------------------------------------------
上記に差し替え&追加してsbChangeのMXを設定し、
LbChangeをListBoxes(1)にマクロ登録すれば少しはマシになります。
ですが、手が込み過ぎておすすめしないのは変わりありません。
また、
>モードレスなUserFormにListBoxを配置して使う方が良いと思います。
ここで書いたListBoxはActiveXコントロール(コントロールツールボックス)のListBoxの事です。
#もちろんExcel.ListBoxはUserFormに置けませんから
#お判りでしょうけど念のため。
#ActiveXコントロールは直接ワークシート上に配置するよりも
#UserFormに配置して使ったほうが不具合少なく、良いかと思ったもので。
end-uさま、おはようございます、merlionXXです。
いつもありがとうございます。
何かものすごい仕掛けですね。
まだよく理解できていませんが、実装するにはちょっと無理があるようです。
( ̄~ ̄;)う~ん、やはりフォームのリストボックスではマクロでスクロールはできないのが仕様なんですね、しようがない。
ワークシート上に10数個のリストボックスを配置し、デフォルトボタンを用意して初期化したら選択肢が4つ以下のリストボックスは1番目、選択肢が47(都道府県)あるものは16番目の東京を表示させようと思ったのです。
ワークシート上にリストボックスを残しておきたいのでユーザーフォームは今回使用できません。
あまりお勧めでないという、シートにOLEオブジェクト(ActiveX)のリストボックスをはるか、デフォルトボタンを押した場合、何も選択されていない状態にしてしまうなど、他の方法を考えてみます。
ありがとうございました。
No.4
- 回答日時:
>選択肢が47(都道府県)あるものは16番目の東京を表示させようと思ったのです。
そういう用途であれば、DropDownsや[入力規則]リストが使われる事が多いのではないでしょうか。
DropDownsのリストをコードでDropDownする事はできませんが、
DropDownLinesを47、Value = 16 にしてDropDownsクリックしてみてください。
DropDownsのWindows相対位置にもよりますが、全リストが展開されます。
普段は折り畳まれて省スペースですし、ユーザー操作的にもそれほど差異は無いように思えます。
#仕様にダメ出しするつもりはありません。
#他の要件もある事でしょうし、あくまで参考意見です。
No.2
- 回答日時:
シート上のExcel.ListBoxでは ListIndex、Value、Selected(x) = True、
いずれもスクロールしません。仕様です。
諦めてください。
なんとかそれっぽく、
Option Explicit
Dim n As Long
'---------------------------------------------------------------------
'#Sub 準備()でシート追加しListBoxを配置。
'#Sub test()を実行してみてください。
Sub 準備()
With Sheets.Add
.Names.Add "List", "=OFFSET($A$1,$B$1-1,,20)"
With .Range("A1")
.Value = "F1"
.AutoFill .Resize(40), xlFillDefault
End With
With .ListBoxes.Add(.Range("C1").Left, 0, 100, 100)
.ListFillRange = "List"
.LinkedCell = "$B$2"
End With
With .ScrollBars.Add(.Range("C1").Left + 87, 0, 13, 102)
.Min = 1
.Max = 20
.SmallChange = 1
.LargeChange = 10
.LinkedCell = "$B$1"
.OnAction = "sbChange"
.ShapeRange.ZOrder msoBringToFront
End With
End With
End Sub
'---------------------------------------------------------------------
Sub sbChange()
Dim x As Long
With ActiveSheet
With .ScrollBars(Application.Caller)
x = .Value - n
n = .Value
End With
With .ListBoxes(1)
x = .ListIndex - x
If x < 0 Then
x = 0
ElseIf x > 20 Then
x = 20
End If
.ListIndex = x
End With
End With
End Sub
'---------------------------------------------------------------------
Sub test()
Dim x
x = InputBox("ListIndex")
With ActiveSheet
.ListBoxes(1).ListIndex = 1
.ScrollBars(1).Value = x
End With
End Sub
'---------------------------------------------------------------------
...こんな感じで実現してみましたが
トリッキーだし、手動スクロールの動きが変ですし、
実用的ではないです orz
複数のListBoxに設定するのも大変そうなので
モードレスなUserFormにListBoxを配置して使う方が良いと思います。
No.1
- 回答日時:
>lb.ListIndex = 16
ではなくて、lb.Value = "16番目のアイテム名" ではいかがですか?
この回答への補足
いま、ためしにフォームではなくOLEObjectのListboxをワークシート上に一つ配置して以下のコードでやってみました。
Sub test03()
ActiveSheet.ListBox1.Value = "P"
End Sub
で、スクロールされて16番目の P が表示されました。
ただ、わたしがやりたいのはOLEObjectのListboxではなくフォームのListboxでのスクロールなのです。
よろしくお願いします。
hana-hana3さま、ありがとうございます。
説明が足りなかったのでもう少し具体的に書きます。
ワークシート上に複数のListboxがあります。
質問でも書いたようにこれはフォームのListboxで、OLEオブジェクトではありません。
Listboxのうち設定されているリストの数が4以下のものは1番目を選択させます。
これらは最初からリストが全部表示されているのでスクロールの必要はありません。
リストの数が5以上のものは16番目を選択させます。
これらはリストが全部表示されていないので16番目を見えるようにスクロールの必要があります。
テスト用にリストの数が5以上のものはA~Tまでリストを設定しました。
したがって16番目は"P"になります。
ご教示の通り、
Sub test01()
Dim lb As ListBox
With ActiveSheet
For Each lb In .ListBoxes
If lb.ListCount <= 4 Then 'Listが4つ以下のものなら
lb.ListIndex = 1 'Listの一番目を選択
Else 'そうでなければ
lb.Value = "P" '16番目のPを表示
End If
Next lb '繰り返し
End With
End Sub
とやってみましたが、lb.Value = "P" のところで実行時エラー13「型が一致しません」となります。
lb.Value = 16
または
lb.ListIndex = 16 とすれば、16番目の"P"が選択されますが、スクロールはされません。
どのように直せばよいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- エアガン・モデルガン 4.2 lb = 1905.09 g のはずなのが、 (⇩)下記の URL の SPECS の所の 1 2022/10/06 15:43
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
スクロールバーでは上下異動できるが、マウスホイールでスクロールしない
Excel(エクセル)
-
-
4
VBAのリストボックスで、横スクロールバーを表示するには?
Visual Basic(VBA)
-
5
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
ユーザーフォーム スクロールバー 非表示にしたい
Excel(エクセル)
-
9
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
10
リストボックスに縦スクロールバーと選択
Visual Basic(VBA)
-
11
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
12
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
13
UserForm1.Showでエラーになります。
工学
-
14
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
15
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
EXCEL VBA リストボックスの列を指定してForeColorを変更する方法について
Excel(エクセル)
-
18
リストビューをスクロールさせるには
Visual Basic(VBA)
-
19
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
20
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
エクセルVBAでフォームのListbo...
-
PDFを(htmlのように)無限に縦...
-
Visual Basicから Spreadのスク...
-
アコーディオンで開かれたパネ...
-
リストビューのスクロールバー...
-
VBE画面の縦のスクロールバ...
-
マウスでコロコロしたいんですが…
-
リストビューの水平スクロール...
-
ウェブサイトがスクロール出来...
-
新着情報などをスクロールしな...
-
勝手にスクロールして動いてしまう
-
リストビューをスクロールさせ...
-
webページで横方向にアンカーを...
-
前のページに戻るとスクロール...
-
大きい表へのスクロールバーの...
-
リストビューのスクロールバー...
-
【jQuery】ページ内リンクの設...
-
resizeするとスマホで何度もリ...
-
階層フレキシブル グリッド コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PDFを(htmlのように)無限に縦...
-
Excelでワードアートや図を常に...
-
リストビューをスクロールさせ...
-
エクセルVBAでフォームのListbo...
-
アコーディオンで開かれたパネ...
-
ページ訪問時にiframe内を自動...
-
vb,netでtextboxの文字を右から...
-
Visual Basicから Spreadのスク...
-
リストビューのスクロールバー...
-
大きい表へのスクロールバーの...
-
ページ読み込み時に自動でスク...
-
webページで横方向にアンカーを...
-
Excelで一部分だけを常に表示さ...
-
MFCでのスクロールバーの扱い
-
resizeするとスマホで何度もリ...
-
C#:ListViewでのスクロールイベ...
-
クリックすると横にスムーズス...
-
上下キーを押すと、ページスク...
-
マウスオーバー→ホイール回転で...
-
Spreadのスクロールについて
おすすめ情報