今回は医薬品データが重複しないようチェックをかけるコードを書きましょう。
今回はちょっと難しいですが、頑張って下さいね。
スポンサーリンク
データの重複をチェックするコードを書く
前回は登録した医薬品データをワークシートに転記するコードを書きました。ただこれだけですとちょっとマズイんです。
上の画像を見て下さい。前回の講座と同じように医薬品の新規登録画面でアリセプトD錠5mgについて入力しました。
登録ボタンを押して「はい」を選ぶと、同じ内容にも関わらず押した分だけ後ろのワークシートにデータが転記されていきます。これではダメですね。
今回は医薬品名が重複した(既に登録されている)場合、「重複しています」とメッセージを表示するコードを書いていきましょう。
その前に重複チェックを行うためにワークシートを1つ作ります。Sheet3を医薬品検索結果として下さい。
赤で囲った部分がVBA講座2-16でお話する内容。長くなるので青で囲った部分は次回お話します。それ以外の部分は前回の講座までに入力済みです。
重複チェックはこのようにイメージして下さい。
2.ふるいにかけた結果をワークシート医薬品検索結果に貼り付ける(コピーする)。
もしふるいにかけて抽出された医薬品があれば、それは既に登録済みの医薬品という事になりますね。
それが医薬品検索結果に貼り付けられた場合は、重複チェックがかかるように設定していきます。
ふるいにかけて残らなければ、登録されていない医薬品名ということになるので問題なく新規登録ができるようにします。イメージ的にはこんな感じです。
CurrentRegionプロパティとClearメソッド
それでは1行ずつ解説していきましょう。
DSearch = txtDname.Text
これはもう慣れましたね?変数の宣言です。「変数Dsearchを文字列と宣言する。変数DsearchはtxtDnameに入力されたテキストである。」
ワークシート医薬品検索結果をアクティブにする「アクティブにする≒選択する(タブをクリックする)」と考えて頂ければいいでしょう。
まずはCurrentRegionの説明をします。
例えば
の意味ですが、これは「A1セルを起点としてデータが入力されている範囲をまとめて選択する」という意味です。
A1セルをクリックし、クリックしたまま右下にカーソルを移動させ離すとこうなります。
それでは実際使用する画面でいきましょう。
上の画像ですが、わかりやすくするため、1行目のアリセプトD3mgと3行目のアリセプト細粒0.5は私が追加で入力しました。
列はN列まで、行は4行までデータが入力されていますね。
は、この場合A1~N4までを選択するという形になります。なので…
これは、「ActiveSheet(ワークシート医薬品検索結果)のA1セルを起点としてデータが入力されている範囲を選択してClearする。」という意味になります。
Clearは文字通りクリアする(消す)。Deleteは押すと思って頂いてOKです。
なぜこの作業が必要なのかわかりますか?
もし過去の検索結果が残っていた場合、まだ登録していない薬にも関わらず、既に登録済みと認識される可能性があるからです。
スポンサーリンク
AutoFilterメソッド
上の画像でA列をアリセプトD5mgでフィルターをかけるとしたら、どのように行うかご存知ですか?
A1セルをクリックして、「並び替えとフィルター → フィルター」を選択します。
A1セル(薬品名)の右側の下矢印をクリックすると下に小窓が現れます。アリセプトD3mg、アリセプト細粒0.5%のチェックを外してOKを押します。
アリセプトD5mgのみが抽出されました。これをコードで書きますと…
.Range(“A1″).AutoFilter field:=1, Criteria1:=”アリセプトD錠5mg”
となります。
「AutoFilter」は”フィルターをかけて抽出する”こと。「Field:=1」は”1行目”という意味。
「Criteria1:=”アリセプトD錠5mg”」はフィルターをかける文字列を”アリセプトD錠5mg”で。
つまり
.Range(“A2”).AutoFilter field:=1, Criteria1:=Dsearch
は「変数Dsearchに入っている文字列で、1行目にフィルターをかけて抽出する」という意味になります。
では次
長ったらしいのが出てきました。
まず真ん中付近のSpecialCells(xlCellTypeVisible)。これは一言で言えば「フィルターにかけて抽出されたもの」です。
基本英語なので、なんちゃってでいいから訳していけば結構理解することができます。
Special cellsは「特別なセル」。そのType(タイプ)は「Visible(目に見えている)セル」。
つまり「抽出されているセル」のような感じで。
まとめると、withで省略されていますが、「(ワークシート医薬品マスタの)A1セルを起点としてデータが入力されている範囲をまとめて選択、その中でフィルターにかけて抽出され見えている部分を選択し、ワークシート医薬品検索結果のA1セルに貼り付けるという意味です。」
ちょっとくどい説明になりましたが、省略せずに書くとこういう意味になります。
長くなりましたので今回はこの辺にしましょう。お疲れ様でした。次回は重複チェックの後半を説明します。