一致する「発注番号」をリストボックスに表示したい
未読分:2件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#2 2014年12月17日(水)17時26分 From: ポム | 返事 削除 変更 |
すみませんがExcel2007での確認です。大差ないと思いますが。。 エクセルのフィルタリング機能をVBA化して回答してみます。 1シートずつ(4シート分)を入力された「名称」「番号」よりフィルタリングして、フィルタリングされたデータのみListboxへの追加処理をしています。 Listbox1には結果として、データ順にそのまま表示されます。 (特に記載がなかったため「発注番号」の重複データもそのまま表示されます。) Option Explicit Private Sub CommandButton1_Click() '検索ボタンクリック時 Dim FilterRow As Range ListBox1.Clear 'リストボックス初期化 With ActiveWorkbook.Worksheets("交換(平成26年)") If .AutoFilterMode = True Then .AutoFilterMode = False 'フィルタモード解除 End If .Select Columns("E:G").Select Selection.AutoFilter ActiveSheet.Range("$E$1:$G$500").AutoFilter Field:=2, Criteria1:="=" & TextBox1.Text, _ Operator:=xlAnd ActiveSheet.Range("$E$1:$G$500").AutoFilter Field:=3, Criteria1:="=" & TextBox2.Text, _ Operator:=xlAnd 'フィルタされて表示されているデータをリストボックスへ For Each FilterRow In .Range("E1"). _ CurrentRegion.Resize(, 1).SpecialCells(xlVisible) If FilterRow.Row <> 1 Then '1行目(タイトル)は除外 'ListBox1へ追加 ListBox1.AddItem .Range("E" & FilterRow.Row).Value End If Next FilterRow .AutoFilterMode = False 'フィルタモード解除 .Range("E1").Select End With With ActiveWorkbook.Worksheets("解約(平成22〜24年)") If .AutoFilterMode = True Then .AutoFilterMode = False 'フィルタモード解除 End If .Select Columns("D:F").Select Selection.AutoFilter ActiveSheet.Range("$D$1:$F$500").AutoFilter Field:=2, Criteria1:="=" & TextBox1.Text, _ Operator:=xlAnd ActiveSheet.Range("$D$1:$F$500").AutoFilter Field:=3, Criteria1:="=" & TextBox2.Text, _ Operator:=xlAnd 'フィルタされて表示されているデータをリストボックスへ For Each FilterRow In .Range("D1"). _ CurrentRegion.Resize(, 1).SpecialCells(xlVisible) If FilterRow.Row <> 1 Then '1行目(タイトル)は除外 'ListBox1へ追加 ListBox1.AddItem .Range("D" & FilterRow.Row).Value End If Next FilterRow .AutoFilterMode = False 'フィルタモード解除 .Range("D1").Select End With With ActiveWorkbook.Worksheets("解約(平成25年)") If .AutoFilterMode = True Then .AutoFilterMode = False 'フィルタモード解除 End If .Select Columns("D:F").Select Selection.AutoFilter ActiveSheet.Range("$D$1:$F$500").AutoFilter Field:=2, Criteria1:="=" & TextBox1.Text, _ Operator:=xlAnd ActiveSheet.Range("$D$1:$F$500").AutoFilter Field:=3, Criteria1:="=" & TextBox2.Text, _ Operator:=xlAnd 'フィルタされて表示されているデータをリストボックスへ For Each FilterRow In .Range("D1"). _ CurrentRegion.Resize(, 1).SpecialCells(xlVisible) If FilterRow.Row <> 1 Then '1行目(タイトル)は除外 'ListBox1へ追加 ListBox1.AddItem .Range("D" & FilterRow.Row).Value End If Next FilterRow .AutoFilterMode = False 'フィルタモード解除 .Range("D1").Select End With With ActiveWorkbook.Worksheets("解約(平成26年)") If .AutoFilterMode = True Then .AutoFilterMode = False 'フィルタモード解除 End If .Select Columns("D:F").Select Selection.AutoFilter ActiveSheet.Range("$D$1:$F$500").AutoFilter Field:=2, Criteria1:="=" & TextBox1.Text, _ Operator:=xlAnd ActiveSheet.Range("$D$1:$F$500").AutoFilter Field:=3, Criteria1:="=" & TextBox2.Text, _ Operator:=xlAnd 'フィルタされて表示されているデータをリストボックスへ For Each FilterRow In .Range("D1"). _ CurrentRegion.Resize(, 1).SpecialCells(xlVisible) If FilterRow.Row <> 1 Then '1行目(タイトル)は除外 'ListBox1へ追加 ListBox1.AddItem .Range("D" & FilterRow.Row).Value End If Next FilterRow .AutoFilterMode = False 'フィルタモード解除 .Range("D1").Select End With 'カーソルを元に戻す With ActiveWorkbook.Worksheets("交換(平成26年)") .Select .Range("E1").Select End With End Sub |
Message#1 2014年12月16日(火)19時25分 From: kiminiaitai | 返事 削除 変更 |
すみません、VBA初心者です。教えて下さい。 使用環境は、Excel2003と2013です。 @Sheet1"交換(平成26年)" A・・・ E F G・・・ 1 発注番号 名称 番号 2 2014-10-0001 ああああ 101 3 2014-09-0099 いいいい 202 *E列に「発注番号」、F列に「名称」、G列に「番号」 ASheet2"解約(平成22〜24年)"、Sheet3"解約(平成25年)"、Sheet4"解約(平成26年)" A・・・ D E F・・・ 1 発注番号 名称 番号 2 2014-04-0111 うううう 101 3 2014-10-0005 いいいい 202 *D列に「発注番号」、E列に「名称」、F列に「番号」 このようなシートで、ユーザーフォームにて、「名称」(TextBox1)、「番号」(TextBox2) を入力し、両方に一致する「発注番号」をリストボックスに表示したいと思っています。 発注番号は複数出てきます。 検索範囲は、1つのファイル内にシートが4枚ほどあり、"交換(平成26年)"・"解約(平成22〜24年)"・"解約(平成25年)"・"解約(平成26年)"で、それぞれ最大で500行ほどになります。 いろいろ、調べながらやってみたのですが、うまく出来ません。。。 どのようにしたらいいのでしょうか・・・ |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降