2023年4月25日火曜日

ミステリーでは、刑事が車椅子生活で再任用されたり、片や再雇用警察官が活躍するドラマがありますが、こちらはシコシコVBA ー 配列(一次元)検索(VBA)

       
『再雇用警察官』は、テレ東系列のテレビドラマ化で、はやシリーズ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 件のコメント:

コメントを投稿