質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1321閲覧

ユーザーフォームの2つ目のリストボックスがうまく動作しない

yuyu36

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/01/04 14:31

前提・実現したいこと

1つ目のリストボックスを選択すると2つ目のリストボックスにデータが表示されるユーザーフォームを作成中。

発生している問題・エラーメッセージ

listbox1の最上端(indexの0)をクリックするとlistbox2にデータは反映されるが、 listbox1の0の位置以外をクリックしてもlistbox2には何も反映されない エラーメッセージは出ない。

該当のソースコード

エクセル VBA

Option Explicit
Dim TextRow As Long
Dim i As Long
Dim h As Long

Private Sub ListBox1_Change()
ListBox2.Clear
If ListBox1.ListIndex = h Then
h = h + 3
With Worksheets("Sheet2")

ListBox2.List = .Range(.Cells(4, h), .Cells(20, h)).Value

End With End If With UserForm1.ListBox2

' 複数選択可
.MultiSelect = fmMultiSelectMulti

End With
End Sub

Private Sub UserForm_Initialize()

With Worksheets("Sheet4") ListBox1.List = .Range(.Cells(3, 3), .Cells(20, 3)).Value End With

End Sub

### 試したこと Select Caseを使用して1つ1つ入力すると、listbox2に見出しに応じたデータが反映されるが、 データ量が多いため大変になる。 listboxプロパティは違う列のデータは参照できないのでしょうか? ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。![イメージ説明](d265b68150fb07fc38664cbbf5de9f6b.jpeg)![イメージ説明](a02a33a8b64444878e1ef57e81077a8a.jpeg)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

listbox1の最上端(indexの0)をクリックするとlistbox2にデータは反映されるが、 listbox1の0の位置以外をクリックしてもlistbox2には何も反映されない

その通りのコードになってます。

vba

1If ListBox1.ListIndex = h Then

このコードの前にhに何も代入していないので、hは0の状態です。
つまり、先頭を選択している場合以外は何もしません。

このIf文は不要です。
If .... t]en と End If を削除して、下記のコードを挿入すればいいでしょう。

vba

1 h = ListBox1.ListIndex

追記

コードをよく見たら、リストボックスは複数選択可能なんですね。
複数選択した場合は、ListBox2にはどのように表示させるつもりですか。
その辺も検討する必要がありますね。
とりあえず「VBA ユーザーフォーム リストボックス 複数選択」でWEB検索すれば参考になるコードは見つかるでしょう。

投稿2022/01/05 00:35

編集2022/01/05 02:46
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuyu36

2022/01/05 17:15

ありがとうございます!ご教授いただいた方法でうまく動作できました!listbox2にはシート2の4行目以降を表示させてます。複数選択して変数でシート1の任意の位置に転記させます。転記も問題無く動作しています。 本当はリストボックス1の参照をシート2の3列目以降の見出しのみを参照したいのですが、うまくいかず、シート4にやむなく見出しの値を「イコール」で連動させて上から下に参照させています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問