[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォームのリストボックスで抽出したい。』(pony)
フォームのリストボックスで抽出したい。
”価格表”シート 商品価格リストがあります。
”見積作成”シート 入力フォームです。
”見積作成”シートのB列Wクリックでフォームが開きます。
Listbox1には”価格表”シート B列の分類2
Listbox2には”価格表”シート C列の分類3
Listbox3には”価格表”シート D列の品名&G列の金額 ※2列表示したい
を、絞り込み表示できるようにしたいのですが
同じ分類名も全て表示されてしまいます。
フィルタの様に絞り込み表示する方法を
ご教授宜しくお願い致します。
Sub SetListBox(ss As String)
Dim r As Range, c As Range, n As Integer ListBox1.Clear Set r = Sheet7.Range("A2:A1500") For Each c In r For n = 1 To 5 If c.Text Like Mid(ss, n, 1) & "*" Then ListBox1.AddItem c.Offset(, 1).Value End If Next Next End Sub
Private Sub CommandButton1_Click()
SetListBox "部品1" End Sub
Private Sub CommandButton2_Click()
SetListBox "部品2" End Sub
Private Sub ListBox1_Change()
Dim c As Range
Dim br As String ListBox2.Clear ListBox3.Clear br = ListBox1.Value With Sheets("価格表") For Each c In .Range("B1", .Range("C" & Rows.Count).End(xlUp)) If c.Value = br Then ListBox2.AddItem c.Offset(, 1).Value Next End With End Sub
Private Sub ListBox2_Change()
Dim c As Range
Dim br As String br = ListBox2.Value With Sheets("価格表") For Each c In .Range("C1", .Range("D" & Rows.Count).End(xlUp)) If c.Value = br Then ListBox3.AddItem c.Offset(, 1).Value '& c.Offset(, 4).Value '.ColumnWidths = "140;100" Next End With With ListBox3 .ColumnCount = 2 .ColumnWidths = "80;60" '.RowSource = "Sheet1!A1:D" & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row End With
End Sub
Private Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wSheetName As Variant wSheetName = ActiveSheet.Name
With Worksheets(wSheetName) ' .Cells(ActiveCell.Row, ActiveCell.Column).Value = ListBox1.List(ListBox1.ListIndex, 0) Cells(ActiveCell.Row, 2).Value = ListBox2.Text Cells(ActiveCell.Row, 3).Value = ListBox3.Text End With Unload Me
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
SetListBoxが何をしようとしているのか分からないのですが、「部品1」「部品2」で
始まるデータで絞り込むなら、
Sub SetListBox(ss As String)
Dim r As Range, c As Range, n As Integer ListBox1.Clear Set r = Sheet1.Range("A2:A1500") For Each c In r If c.Text Like ss & "*" Then ListBox1.AddItem c.Offset(, 1).Value End If Next End Sub
Private Sub CommandButton1_Click()
SetListBox "部品1" End Sub
Private Sub CommandButton2_Click()
SetListBox "部品2" End Sub
Private Sub ListBox1_Change()
Dim c As Range Dim br As String If ListBox1.ListCount = 0 Then Exit Sub ListBox2.Clear ListBox3.Clear br = ListBox1.Value With Sheets("価格表") For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp)) If c.Value = br Then ListBox2.AddItem c.Offset(, 1).Value Next End With End Sub
'ListBox3に複数列表示するなら、
Private Sub ListBox2_Change()
Dim c As Range Dim br As String If ListBox1.ListCount = 0 Then Exit Sub If ListBox2.ListCount = 0 Then Exit Sub br = ListBox2.Value With Sheets("価格表") For Each c In .Range("C1", .Range("C" & Rows.Count).End(xlUp)) If c.Value = br Then With ListBox3 .AddItem "" .List(.ListCount - 1, 0) = c.Offset(, 1).Value .List(.ListCount - 1, 1) = c.Offset(, 4).Value End With '.ColumnWidths = "140;100" End If Next End With With ListBox3 .ColumnCount = 2 .ColumnWidths = "80;60" '.RowSource = "Sheet1!A1:D" & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row End With End Sub
Private Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wSheetName As Variant wSheetName = ActiveSheet.Name With Worksheets(wSheetName) ' .Cells(ActiveCell.Row, ActiveCell.Column).Value = ListBox1.List(ListBox1.ListIndex, 0) Cells(ActiveCell.Row, 2).Value = ListBox2.Text Cells(ActiveCell.Row, 3).Value = ListBox3.Text End With Unload Me End Sub
Private Sub CommandButton1_Click()
SetListBox "部品1" End Sub
Private Sub CommandButton2_Click()
SetListBox "部品2" End Sub
Private Sub ListBox1_Change()
Dim c As Range Dim br As String If ListBox1.ListCount = 0 Then Exit Sub ListBox2.Clear ListBox3.Clear br = ListBox1.Value With Sheets("価格表") For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp)) If c.Value = br Then ListBox2.AddItem c.Offset(, 1).Value Next End With End Sub
Private Sub ListBox2_Change()
Dim c As Range Dim br As String If ListBox1.ListCount = 0 Then Exit Sub If ListBox2.ListCount = 0 Then Exit Sub br = ListBox2.Value With Sheets("価格表") For Each c In .Range("C1", .Range("C" & Rows.Count).End(xlUp)) If c.Value = br Then With ListBox3 .AddItem "" .List(.ListCount - 1, 0) = c.Offset(, 1).Value .List(.ListCount - 1, 1) = c.Offset(, 4).Value End With '.ColumnWidths = "140;100" End If Next End With With ListBox3 .ColumnCount = 2 .ColumnWidths = "80;60" '.RowSource = "Sheet1!A1:D" & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row End With End Sub
Private Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wSheetName As Variant wSheetName = ActiveSheet.Name With Worksheets(wSheetName) ' .Cells(ActiveCell.Row, ActiveCell.Column).Value = ListBox1.List(ListBox1.ListIndex, 0) Cells(ActiveCell.Row, 2).Value = ListBox2.Text Cells(ActiveCell.Row, 3).Value = ListBox3.Text End With Unload Me End Sub
詳細が分からないので、全体的な動作確認はしていなのです。そちらで適宜修正して下さい。
(ウッシ) 2016/08/19(金) 13:38
再度質問させて頂きたいのですが
Listbox 1.2.3に絞り込み表示する際
フィルタをかけた時の様に、同じ文言は1行のみの表示にしたいです。
宜しくお願い致します。
(pony) 2016/08/19(金) 15:12
Sub SetListBox(ss As String)
Dim r As Range, c As Range, n As Integer ListBox1.Clear Set r = Sheet1.Range("A2:A1500") With CreateObject("Scripting.Dictionary") For Each c In r If c.Text Like ss & "*" Then .Item(c.Text) = Empty End If Next ListBox1.List = .Keys End With End Sub
Private Sub CommandButton1_Click()
SetListBox "部品1" End Sub
Private Sub CommandButton2_Click()
SetListBox "部品2" End Sub
Private Sub ListBox1_Change()
Dim c As Range Dim br As String If ListBox1.ListCount = 0 Then Exit Sub Dim d As Object ListBox2.Clear ListBox3.Clear br = ListBox1.Value Set d = CreateObject("Scripting.Dictionary") With Sheets("価格表") For Each c In .Range("B1", .Range("B" & Rows.Count).End(xlUp)) If c.Value = br Then d.Item(c.Offset(, 1).Value) = Empty End If Next ListBox2.List = d.Keys End With Set d = Nothing End Sub
Private Sub ListBox2_Change()
Dim c As Range Dim br As String If ListBox1.ListCount = 0 Then Exit Sub If ListBox2.ListCount = 0 Then Exit Sub br = ListBox2.Value With Sheets("価格表") For Each c In .Range("C1", .Range("C" & Rows.Count).End(xlUp)) If c.Value = br Then With ListBox3 .AddItem "" .List(.ListCount - 1, 0) = c.Offset(, 1).Value .List(.ListCount - 1, 1) = c.Offset(, 4).Value End With '.ColumnWidths = "140;100" End If Next End With With ListBox3 .ColumnCount = 2 .ColumnWidths = "80;60" '.RowSource = "Sheet1!A1:D" & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row End With End Sub
Private Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wSheetName As Variant wSheetName = ActiveSheet.Name With Worksheets(wSheetName) ' .Cells(ActiveCell.Row, ActiveCell.Column).Value = ListBox1.List(ListBox1.ListIndex, 0) Cells(ActiveCell.Row, 2).Value = ListBox2.Text Cells(ActiveCell.Row, 3).Value = ListBox3.Text End With Unload Me End Sub
Listbox3 はD列の品名だけで集約するのですか?
G列の金額はD列の品名毎に合計ですか?
(ウッシ) 2016/08/19(金) 15:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.