『再雇用警察官』は、テレ東系列のテレビドラマ化で、はやシリーズ5なんだ。
この間、視聴しましたが、途中で寝てしまい、目覚めるとエンディングでした。
残念と思いましたが、どうも寄る年波には勝てないなあと、嘆息する始末です。
自分も同じ境遇ですが、こちらは単なる再雇用事務作業員で、カッコよくない。
そんな小生にも、社内で仕事上の問い合わせはあるもので、不良在庫品の照会。
約千点の部品を残すかどうか、不要ならば廃棄処分してしまうと言うお達しね。
エクセルの表が配布されましたが、項目にフィルターボタンが設定されていた。
これを使えば、自分の担当業務で使っているパーツコードから、検索も可能ね。
ただ、コードを一つずつ入力しながら、確認照合するのは根気の要る作業です。
なので、VBAで検索プログラムを作って実行してしまおうと、考えてみました。
下記の通り、サンプルを挙げておきますが、キモは超高速の配列検索をする点。
というわけで、あっという間に終わり便利なので、忘備録的として投稿します。
*プログラムの前提:
① シート1に検索されるデータがB列にある。
② シート2のA列に検索したいデータの一覧がある。
③ 検索をかけてシート1に存在した場合、シート1のA列に”〇”をつける。
④ シート1とシート2の対象となるデータは、高速化のため、配列化する。
⑤ 検索データは、数字の羅列でも先頭に数字のゼロになる場合があり、
初めに数値を文字列化して、文字列によるデータ配列で検索を掛けている。
Sub SearchGo()
Dim i As Long, j As Long, B As Variant, C As Variant
For i = 1 To Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Sheet2").Range("A" & i).NumberFormatLocal = "@"
Worksheets("Sheet2").Range("A" & i).Value = CStr(Worksheets("Sheet2").Range("A" & i).Value)
Next i ’検索したいデータの値を文字列に置き換えてしまう
B = Worksheets("Sheet1").Range("B1:B" & Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row)
C = Worksheets("Sheet2").Range("A1:A" & Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row) '配列の作成
For j = 1 To Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
If C(j, 1) = B(i, 1) Then Worksheets("Sheet1").Range("A" & i).Value = "〇"
Next i
Next j '繰り返し処理の入れ子構造
MsgBox "処理終了しました。" '検索終了のメッセージ
Worksheets("Sheet1").Range("A1").Select
'配列の一致する箇所が選択されたままなので、シート1のA1セル選択に変更
End Sub
0 件のコメント:
コメントを投稿