ワークシートのリストの氏名から顧客リストを配列に作成するには?

Question 001t 作りながら覚える! Excel VBA マクロ 組み方講座 Previous Next
84ページ 【図5-6】 ◆ 環境・・ Excel 2007 & Windows Vista
詳細は こちら
はじめまして。 周期的に訪れる単純作業を自動化しようと思い、本書を購入致しました。 (私はプログラムの知識は殆どございません。) 質問内容は以下のとおりです。宜しくお願いします。

【質問内容】
本のP84、【図5-6】の 「DB」シート (右図) の顧客名からシートのデータは保ったままで以下のような顧客リストを作成したいと思っております。
北島のぞみ
谷本幸恵
塚田三沙
吉田芙美
上野亜紀

【私の考えていること】 (P84のDBシートを処理の対象とする)
1. 顧客リストを作成する文字列型配列を宣言する
2. B4の初期値を配列の先頭要素に格納
3. B5は配列要素を参照しB4と一致しているかどうか判定を行い、一致した場合は配列要素には入れない
4. B6~B11も3.と同等の手順(セルの参照値は違いますが・・・)を繰り返す。
以上、大変お忙しいところ申し訳ありませんが、宜しくお願いします。
Answer   Copyright (C) 2009.5.27 永井善王
拙著「 作りながら覚える! Excel VBA マクロ組み方講座 」をお求めいただき、ありがとうございます。

読者さま質問は、本に掲載されたマクロに直接関係する疑問点などにお答えしています。 本の84ページあたりには、「DB」シートから当月分データを抽出して「当月分」シートへコピー貼り付けする解説があります。
あなたのご質問との接点は、「DB」シートのデータだけ。 正直びっくりしました。

しかし、ちょうど
期間限定質問の受付中でしたし、「プログラムの知識は殆どございません」と言われる割に、かなりハイレベルなご質問を的確にまとめておられるので、簡単ですが答えさせていただきます。

ワークシートに作成されたリストから重複を取り除きたい場合、Excelの一般機能にある アドバンスフィルタ を使えば簡単にできることをご存知ですね。
この機能は、Excel 2007では フィルタの詳細設定 と呼ばれ、当然ですがマクロでも制御できます。
この機能を利用するためには、本の【図5-6】の 「DB」シートは当月分を抽出し終わった状態で非表示になった行があるので、そのままの状態でアドバンスフィルタすると、「北島のぞみ」が先頭になるとは限りません。

よって、同じページにある 【図5-7】 の「当月分」シート (上図) のように非表示行のないシートを作ってからアドバンスフィルタします。

すると左図のように、重複を取り除いた氏名だけの状態ができるので、これを配列に格納すれば、あなたが希望される順序の顧客リストが簡単にでき上がることになります。

あなたが示された処理手順は、大型コンピュータとかで古くから行われている汎用的でクラシカルな手法のようですが、Do...Loopとかでの繰り返しと If文での判定など、冗長でややこしいコードを書くことになりかねませんし、苦労してコーディングしたとしても実行すると処理時間が掛ってしまったりして報われないでしょう。
あなたは、これから Excel VBA マクロを覚えようとしているしっかりした方のようですから、Excelの能力をフルに発揮させれるマクロを作るように精進されるとよいと思います。 なら、応援します。

参考ページ
セルの値を配列に取得し配列の値をセルに設定する

 

Excel VBA Macro