15. 検索ボタンを押せば、[指定製番フォーム]が表示されて
条件入力が可能になる。
入力後に、[抽出ボタン]をクリックすると条件に合致する
データが抽出される。
又、入力文字はデータを判別できる文字列だけでよい。
構文に記入したアスタリスクが効果を発揮してくれる。
14. ボタンに[マクロの登録]で[検索]を選択して
[OK]をクリックする。
フィルター.Show vbModeless ' 入力フォームの名前がフィルターなので、フィルターと言う
' フォームを表示する。
' vbModelessはマウスのカーソルで画面上を移動が可能になる。
13. 新規モジュールを作成する。
12. [挿入]-[図形]-[四角形]をクリックして、適当な場所に
作成して、出来た図形を選択して、塗りつぶしで色を
付ける。
検索文字を入力すると、図形が完成する。
11. 検索条件の入力ボタンの作成
strSeib=TextBox1.Text ' フォームのTextBox1に入力した文字列を製番に代入する。
strHin=TextBox2.Text ' フォームのTextBox2に入力した文字列を品名に代入する。
strKei=TextBox3.Text ' フォームのTextBox3に入力した文字列を形状に代入する。
ActiveSheet.Range("B14:K & intRow).AutoFilter field:=1, Criterial:=strSeib
ActiveSheet.Range("B14:K & intRow).AutoFilter field:=4, Criterial:="=*"&
strHin & "*"
ActiveSheet.Range("B14:K & intRow).AutoFilter field:=5, Criterial:="=*"
& strKei & "*"
' Criterisl="=*" & strHin & "*" は *アイドラ*のことで、strHinの前後にアスタリスクを使用している。
' アスタリスクを入力文字の前後に使用すると、品名の文字列を完全に入力しなくても、入力文字だけで
' 判別できれば、品名が抽出される。
' 面倒な完全入力しなくても良いが、判別できるだけの文字列の入力は必要である。
Unload フィルター ' ユーザーフォームを非表示にする。
● 前回の構文をコピーして、変更した完成構文である。
TextBox1.Text="" ' TextBox1のテキストを空白にする。
Private Sub UserForm_Click( )は不要なので削除しても良い。
10. Initializeはフォームを開いた
時に自動実行する構文である。
テキストボックスに仮入力した
文字や、実行時に入力した条件
文字などを消去する。
9. 右上の▼を押すとInitializeが
あるので、クリックすると
Privete Subが作成される。
8. 上の▼を押すとUserFormがある
のでクリックすると、
Pravete Subが作成される。
7. [抽出]コマンドボタンをクリック
すると、コードが作成される。
その中に、前回の構文をコピー
する。
6. コマンドボタンはオブジェクト名
に表示される。変更しても良い。
色はBackColor、文字はCaption
文字色はForeColorで変更できる。
5. TextBoxの入力文字は、ここで
入力する必要はないが、実際に
入力される文字を仮入力して、
色やサイズを調整しておく。
ForeColorで色を、Fontで文字
種やサイズを設定しておく。
4. 名前をTextBox1 に変更する。
3. [プロパティウインドウ]を
開いて、[オブジェクト名]を
フィルターに[Caption]を
指定抽出に変更する。
●完成した状態です。
各部の設定を説明して行きます。
2. [コントロール]の[テキストボックス]を
クリックして、フォームの範囲で選択
すると、テキストボックスが作成され
ます。
完成形を参考に作成してください。
VBAで入力フォームの作成
1. [挿入]-[ユーザーフォーム]を順にクリックすると、
新規のフォームが作成される。
その時にツールボックスが表示されます。
表示されなかったら、[表示]のツールボックスを
クリックして、コントロールを表示してください。
●入力した条件で抽出する、可変検索フィルター
Worksheets("Sheet2").Range(""B5:K50").ClearContents '
転記場所を空白にして置く。
Sheeta("Sheet1").Select
intRow=Range("B4").End(xlDown).Row ' フィルターするデータの行端を調べる。
Range("B4:K" & intRow).Select ' フィルター範囲を選択
Selection.AutoFilter ' 選択範囲をフィルター
strSeib="QD-6772" ' フィルター条件の製番
strHin="スプロケット" ' フィルター条件の品名
strKei="FBN40B14D25" ' フィルター条件の形状と寸法
ActiveSheet.Range("B4:K" & intRow).Autofilter field:=1, Criterial:=strSeib
ActiveSheet.Range("B4:K" & intRow).Autofilter field:=4, Criterial:=strHin
ActiveSheet.Range("B4:K" & intRow).Autofilter field:=5, Criterial:=strKei
' フィルター範囲のフィールド1番目を strSeib でフィルターする。(B列)
' 次にフィールド4番目を strHin でフィルターする。(E列)
' 次にフィールド5番目を strKei でフィルターする。(F列)
Selection.Copy ' フィルター結果をコピーする。
Sheet("Sheet2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:=False,Transpose:=False
' フィルター結果を貼り付ける。
Sheets("Sheet1").Select ' フィルター状態はSheet1なので、Sheet1で
ActiveSheet.AutoFilterMode=False ' フィルターを解除する必要がある。
Application.CutCopyMode=False ' コピーをした後は、必ずこの解除が必要です。
Range("A1").Select
End Sub
フィルター結果を別のシートに転記した。
製番=QD-6772, 品名=スプロケット, 形状・寸法=FBN40B14D25のデータが知りたい場合、
色々な方法があるが、フィルター検索もその一つである。
●フィルター条件を、可変ではなく固定した場合を見てみましょう。
フィルターを実行した結果が表示された。
基本的なマクロの習得
複数条件フィルター抽出
実際に使っているシステムの内容で解説
EXCEL VBA 講座