エクセル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も見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
スクロールバーでは上下異動できるが、マウスホイールでスクロールしない
Excel(エクセル)
-
-
4
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
VBAのリストボックスで、横スクロールバーを表示するには?
Visual Basic(VBA)
-
7
ユーザーフォーム スクロールバー 非表示にしたい
Excel(エクセル)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
10
リストビューをスクロールさせるには
Visual Basic(VBA)
-
11
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
12
リストボックスに縦スクロールバーと選択
Visual Basic(VBA)
-
13
EXCEL VBA リストボックスの列を指定してForeColorを変更する方法について
Excel(エクセル)
-
14
UserForm1.Showでエラーになります。
工学
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
リストボックスの特定行の背景色
Visual Basic(VBA)
-
17
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
18
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
19
ListBoxで改行したい
Visual Basic(VBA)
-
20
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
リストビューをスクロールさせ...
-
PDFを(htmlのように)無限に縦...
-
画像のようにとあるサイトの横...
-
Visual Basicから Spreadのスク...
-
エクセルVBAでフォームのListbo...
-
リストビューのスクロールバー...
-
ポストバック時のスクロール位...
-
MFCでのスクロールバーの扱い
-
階層フレキシブル グリッド コ...
-
新着情報などをスクロールしな...
-
vb,netでtextboxの文字を右から...
-
スクロールするとメニューも一...
-
JTableの行ヘッダーを非表示に...
-
マウスオーバー→ホイール回転で...
-
スクロールで続きが読み込まれ...
-
大きい表へのスクロールバーの...
-
マウスでコロコロしたいんですが…
-
リストビューの水平スクロール...
-
アコーディオンで開かれたパネ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでワードアートや図を常に...
-
エクセルVBAでフォームのListbo...
-
PDFを(htmlのように)無限に縦...
-
リストビューをスクロールさせ...
-
大きい表へのスクロールバーの...
-
画像のようにとあるサイトの横...
-
アコーディオンで開かれたパネ...
-
Visual Basicから Spreadのスク...
-
vb,netでtextboxの文字を右から...
-
webページで横方向にアンカーを...
-
ページ訪問時にiframe内を自動...
-
VBE画面の縦のスクロールバ...
-
常に画像の大きさを横幅100%で...
-
html js 横軸の長いチャート
-
グループボックス内のコンボボ...
-
文章の自動スクロール
-
Webサイト内でスクロールする小...
-
Spreadのスクロールについて
-
ExcelVBAで他のアプリをスクロ...
-
上下キーを押すと、ページスク...
おすすめ情報