2021年10月12日火曜日

全然、役に立たない配列のコードを紹介しても自己満足で、逆にノウハウを教えたたくないんじゃないのか - 配列の検索(VBA)

詳しい説明は本文で

現在、社内で業務改善するプログラムを、VBAでシコシコ書いている最中です。
内容的には、簡単に言うと、受注した内容を時間を置いて比較するシステムだ。

新規に受注した内容、取り消された注文、数量納期の変更した注文を探します。
前日と当日の受注状況のデータを出力しますが、相違のある内容を見つける事。

しかも、海外からの受注なので、データが各国別に出力されるCSVファイルね。
これをエクセルの標準ファイルへ変換して、日付別のフォルダーに保存します。

まあ、ここまでが第一段階で、受注表を見やすくするので背景色も付けました。
問題なのは、これら各国別のファイルを、比較するために開いて検索を掛ける。

その検索結果を一覧表にまとめ上げて、実施した当日フォルダーに保存します。
問題なのは、検索回数が多いことで、一つのプログラムの中に四回も実施する。

ファイルを開いて閉じる作業も十回ほど行いますので、なかなか複雑なコード。
個々のプロシージャでは動作しますが、組合わせるとエラーが出たりで難しい。

検索には、一番安直な”Find”のコマンドを使いましたが四回目でエラーが出た。
グローバルなんちゃらかんちゃらとかで、単発起動では動作したんだけどなあ。

そこで、このコマンドを捨てて他の検索方法を探しましたが、手短なのは配列。
でも、ネットだと、配列の紹介がお粗末なサンプルに過ぎず、実用には程遠い。

一方、配列による検索を紹介してくれたサイトも、説明が雑で良く分からない。
なんか、教えたくないのかもしれないと思って、実際にサンプルを奮発するぜ。

ここで、基本的なことですが、データベースには番号などIDが振られています。
このIDにヒモ付けされたのが、個別の関連情報に当たるので、IDで検索が最初。

従って、IDのデータから検索するのが順当で、配列の検索も簡単にできるんだ。
サンプルを載せておきますが、これで十分に活用できるコード見本と思います。

Sub Test()
    Dim i As Long, B As Variant
    B = Range("B1:B135") ’B列にID番号のデータ
    For i = 1 To 135 ’セル”A1”は検索する値とします。
        If B(i, 1) = Range("A1") Then MsgBox i
    ’検索する値のある行番号を返します。
    Next i
End Sub

というわけで、配列検索には、データをArrayコマンドで格納なんて全く不要。
検索の軸となるID番号のような、エクセルのシート上に書き込まれていれば、そのデータの列を使って検索するだけですので、Findコマンド以上に簡単すぎて、プログラム改良にぜひ活用しようかと思った自分なのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿