VB6.0で複数のリストボックスに関連性を持たせる方法とは?

このQ&Aのポイント
  • VB6.0で3つのリストボックスに関連性を持たせたい方法について教えてください。
  • リストボックスでクリックした項目に関連する行が他のリストボックスでも選択されるようにしたいですが、件数が増えると揃わなくなってしまいます。解決方法を教えてください。
  • VB6.0のリストボックス以外でも、3つの項目に関連性を持たせる方法があれば教えてください。
回答を見る
  • ベストアンサー

VB6.0 リストボックス

VB6.0で3つのリストボックスに関連性を持たせたいと思っています。 Private Sub lstBox_Click() Dim intLstIndex As Integer intLstIndex = lstA.ListIndex If (lstA.Selected(intLstIndex)) Then lstB.Selected(intLstIndex) = True lstC.Selected(intLstIndex) = True Else lstB.Selected(intLstIndex) = False lstC.Selected(intLstIndex) = False End If End Sub 以上のように、どれか一つのリストボックスがクリックされたら他のリストボックスの同じ行がtrueになるようにしています。 しかしこれでは件数が増えた場合、選択された行が揃わなくなる場合があり非常に見栄えが悪くなります。 リストボックスでなくともかまわないのですが、このように三つの項目に関連性をもたせることはできませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

コントロール配列はあくまでコントロールの名称の取り扱いの定義に過ぎません。 選択された行が一列に揃う必要があれば、そのためのロジックが必要です。 確認していませんので、動くかわかりませんが、以下のような感じです。 'ClickTargetには設定が行われたリストボックスのインデックスを格納してください。 intLstIndex = lst(ClickTarget).ListIndex for i = 0 to UBOUND(lst) lst(i).Selectedindex = intLstIndex Next i

その他の回答 (1)

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

リストボックスを同名にして、コントロール配列にすれば、そういったロジックを組みやすくなります。

ShimantoGa
質問者

お礼

回答ありがとうございます。 おっしゃる通りコントロール配列を使用すれば一括して制御できるようになり、ソースがすっきりしますね。 有難うございます。 しかし、コントロール配列を使用しただけでは選択された行が一列に揃うことはありませんでした。 でのようにすればよいでしょうか。

関連するQ&A

  • リストボックスから削除、「いいえ」でも削除される

    Windows7 Excel2007でマクロ作成中の初心者です。 リストボックスから、シート(顧客名)を選んで削除するマクロです。 削除がうまくいくのですが、「いいえボタン」を押しても シートが削除されてしまいます。どう修正したらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") End If Next i Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True '顧客リスト.RemoveItem (顧客リスト.ListIndex) '顧客リスト.ListIndex = -1 リストボックスの項目削除 Worksheets(1).Activate End With If btn = vbYesNo Then Exit Sub End If ActiveWorkbook.Save End Sub ----------------------------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • リストボックスからシート削除のマクロを合体したい

    Windows7 Excel2007でマクロ作成中の初心者です。 やりたいことは、リストボックスからシートを選択し、そのシートを削除する。 削除したら、リストボックスの中の、シート選択状態を解除し、その項目だけを 削除することです。 以下のコードで出来たのですが、これを統合して一個のコードにしたいです。 どうしたらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") If btn = vbYes Then Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True リストボックスの項目削除 End If End If Next i Worksheets(1).Activate End With ActiveWorkbook.Save Application.ScreenUpdating = True End Sub ----------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • ExcelVBA リストボックスの複数選択処理がうまくいきません

    こんばんは、助けてください。 EXCEL2007です。 ユーザーフォームにリストボックス(Listbox1)を複数選択可能で作成。 リストボックス各行の4列目には「A」か「B」のいずれかが入っており、選択した行の4列目が「A」ならば「B」を、 「B」ならば「A」をCommandButton1押下でセルに反映させたいのですが、うまくいきません。 [反映先のセル] ・リストボックス1行目⇒セルC4(列番号3) ・リストボックス2行目⇒セルG4(列番号7) ・リストボックス3行目⇒セルK4(列番号11) ・リストボックス4行目⇒セルO4(列番号15) ・リストボックス5行目⇒セルS4(列番号19) ・以降同規則でつづく [コード] 01 Private Sub CommandButton1_Click() 02   Dim ListRow As Integer 03   Dim Retsu As Integer 04 05   For ListRow = 0 To Listbox1.ListCount - 1 06     If Listbox1.Selected(ListRow) Then 07       Retsu = (ListRow + 1) * 3 + ListRow 08       If Listbox1.List(ListRow, 3) = "A" Then 09         Cells(4, Retsu).Value = "B" 10       Else 11         Cells(4, Retsu).Value = "A" 12       End If 13    End If 14  Next ListRow 15 End Sub [現象] 1.単一選択時は、OK。 2.複数選択時は、選択した行のうち一番はじめの行のみOK。 3.試しに、EndSub直前でListbox1.Selected(各ListRow)を検証すると、すべてFalseになってしまっている。 4.IF文(07~12行目)を削除した上で、EndSub直前でListbox1.Selected(各ListRow)を検証すると、True/Falseは意図通りになっている。 IF文(07~12行目)が悪さをしているのでしょうか? うまいやり方をご教授いただければ、幸いです。m(_ _)m

  • リストボックスでの選択項目分削除について。

    こんばんは。 リストボックスでのマルチセレクトで選択した項目を削除する 方法で悩んでいます。 (リストボックスで3項目選択したとして、この3項目を削除する方法) 解答は現在勉強している本に掲載されているのですが意味が分からず。 解答のコードの方にはリストを後ろから削除しているみたいなのですが、 前から削除しても大丈夫だと思いやってみましたが、エラーが出てしまいます。 解説には、先頭から削除するとその時点でリストのインデックス値がずれて しまう。と書いてあるのですが、後ろから削除しても一緒だと考えこんでいます。 解答コード ********************************************************** Private Sub Command2_Click() Dim i As Integer '選択状態(Selected=true)の項目だけ削除 For i = List1.ListCount - 1 To 0 Step -1 If List1.Selected(i) = True Then List1.RemoveItem i End If Next i End Sub ********************************************************* と言う解答コードを自分は、前から削除するように 自分なりのコード ********************************************************* Private Sub Command2_Click() Dim i As Integer For i = 0 To listcount-1 If List1.Selected(i) = True Then List1.RemoveItem i End If Next i End Sub ************************************************************* で作成してみましたが、やっぱりエラーが。 なぜ、前から削除するとエラーになってしまうのか、 もう少し具体的に教えてくれると助かります。 よろしくお願いします。m(__)m

  • リストボックスからシート選んで削除したい

    Excel2007でマクロ作成中の初心者です。 以下のマクロを実行すると、最終行でコンパイルエラーがでて 「参照が不正または不完全です」と表示され削除ができません。 どうしたら、削除できるでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、" & name & "さんを削除していいですか?", _ vbYesNo + vbQuestion, "削除の確認をする") End If Next i End With If btn = vbNo Then Exit Sub End If 'Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete 'ActiveWorkbook.Sheet.[(List(i))].Delete 'ActiveWorkbook.Sheets(name).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Delete ' End Sub

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

  • リストボックスの値を拾うには

    リストボックスの値を拾うには 以下のボタンコマンドでListBox1のListIndexから配列二番目の値を「hinban」という変数に取り込みたいのですがうまくいきません。 「hinban = ListBox1.List(ListBox1.ListIndex, 1)」という行を書いてみましたが 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」とアラートが出てしまいます。 VBA初心者です。 解決法を教えてください。 Private Sub CommandButton1_Click() Dim lastRow As Long Dim i As Integer With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'For i = 1 To 3 '.Cells(lastRow, i).Value = ListBox1.List(ListBox1.ListIndex, i - 1) hinban = ListBox1.List(ListBox1.ListIndex, 1) 'Next i End With End Sub

  • リストボックス内を検索(VB6.0)

    お世話になっています。 リストボックス内に表示したデータを検索するプログラムを作っています。 Private Sub txtName_Change()  Dim i As Integer  For i = 0 To List1.ListCount - 1   If List1.List(i) Like "*" & txtName.Text & "*" Then    List1.ListIndex = i    Exit For   End If  Next i End Sub という感じで、あいまい検索をしています。 検索結果は上手く取得できたのですが、 例えばテキストボックスに「井上」と入力して検索した場合 「上井」というように、 テキストボックスの内容が変わってしまいます。 同じコードを他の場所でも使用しているのですが、 そちらでは問題なく「井上」と表示されたままになっています。 きちんとテキストボックスの中身が「井上」のままでいるには どうしたらよいのでしょうか… 宜しくお願い致します。

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

  • リストボックスからシートを選びアクティブにしたい

    Excel2007でマクロ作成の初心者です。 リストボックスで選択した、リスト項目のワークシートを表示したいのですが、 「インデックスが有効範囲にありません」というエラーがでます。 どうしたらよろしいでしょうか? よろしくお願いします。 ’-------------------------------- Private Sub 顧客リスト_Click() With 顧客リスト Worksheets(.list(.ListIndex - 0)).Activate’----ここでエラー発生します End With End Sub ----------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’---------------------------