• ベストアンサー

Excel VBA ユニークな値のリストアップ

Excel2003で、A列にデータが数万行ありますが、その中にあるのはいわば主キーであり、せいぜい10通りまでしかユニークな値はありません。またそれらユニークな値について、連番などの規則性や関連性はありません。そのユニークな値を、VbAの処理で全てリストアップして配列に入れたいのですが、効率的にやる方法はないでしょうか。数万行のデータを総当りして連想配列に入れるのは無駄な手間だと思いますし、何か良い方法はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 一案です。 Sub Sample1() Range("A:A").AdvancedFilter Action:=xlFilterInPlace, unique:=True Range("A:A").Copy Worksheets("Sheet2").Range("A1") ShowAllData End Sub これでSheet2のA列に重複なしにデータが表示されているはずですので、 これを利用する方法はどうでしょうか?m(_ _)m

absolute_space
質問者

お礼

いいですね。フィルタオプションで重複なし抽出すれば良いことでした。

その他の回答 (2)

回答No.3

元データのコピー&「重複の削除」機能(AdvancedFilter メソッド)をするか、「統合」機能(Consolidate メソッド)を使うか、ピボットテーブルを VBA で操作します。 >ピボットテーブルでは、ちょっと困ります。ユニーク値のリストアップは、処理全体の中で最初の1ステップでしかなく、…… 1 ステップでしかないと、なぜ困るのでしょうか。手作業またはマクロでピボットテーブルレポートを作製し、抽出されたデータをコピーなど、マクロで操作すればいいだけでは。 重複データを削除し重複のないリストを作成するマクロ-AdvancedFilterメソッド http://www.relief.jp/itnote/archives/003690.php 統合(Consolidate)でのデータ集計(Excel(エクセル) VBA入門) http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_consolidate.html ピボットテーブルをマクロで作成する http://www.relief.jp/itnote/archives/018038.php Excel 2010 で VBA を使用してピボットテーブル レポートとグラフを作成する(MSDN) http://msdn.microsoft.com/ja-jp/library/office/hh243933(v=office.14).aspx

absolute_space
質問者

お礼

VBAの中でピボットテーブルや統合機能を操作するのって、コードも複雑になり、動作としてもちょっと遅くならないですかね?フィルタオプションがシンプルそうだと思いました。

  • wild-rain
  • ベストアンサー率44% (26/58)
回答No.1

ピボットテーブルを使って、含まれている項目を抽出してから、それを参照・利用するのではダメなのでしょうか。VBAではなく、エクセルの機能を使って行うことになりますが、データの追加・更新・削除があっても、ピボットテーブルは勝手に更新されるはずなので、そんなに困ることは無いように思います。

absolute_space
質問者

お礼

ピボットテーブルでは、ちょっと困ります。ユニーク値のリストアップは、処理全体の中で最初の1ステップでしかなく、それを元に色々な処理を行います。また多数のブックを次々に開いてそのリストアップをするので、素早く自動処理したいのです。 あと、質問文に、A列のことを「いわば主キー」と書きましたが、これは間違いですね。ユニークな値が数種類しかないわけですから。

関連するQ&A

  • エクセルのVBAでリストに値をセット

    Office2003 エクセルのVBAのプログラムで入力規則のリストを 生成できるような関数、方法はありませんか? このセルで選択された値に紐づいたデータ郡を次の(横の)セルで プルダウンリスト(入力規則のリスト)を自動生成するというものです。 今回フォームの機能(コンボボックスなど)は使用しません。 よろしくお願いいたします。

  • VBAで入力規則のリスト参照元の値取得

    エクセル2007を使っています。 VBAツールを作っており、その処理で使われる一機能として 「任意のセルに設定されている入力規則のリストの元の値をVBAで取得する」処理を コード中に書きたいと思っております。 ■質問概要  「入力規則のリスト」が設定されている任意のセルを選択したときに、そのセルに設定されている  「入力規則のリスト」の「元の値」をVBAで取得する方法について教えてください。  ※取得した値は配列型の変数に代入するものとします ■想定イメージ  たとえば、次のようなブックで使うことを想定しております(画像参照)  ※実際はもっとデータ量が多いブックで使う予定です  ・「リスト元の値」というシートで「選択言語」という名前でリストを定義化  ・「通常操作するシート」では値を入力したいセルに対し、「入力規則のリスト」の「元の値」を   「=選択言語」で設定  VBAではこの「通常操作するシート」の入力欄のセルを選択している時に「選択言語」で定義されている  データをすべて取得し配列型変数に代入するという動作をさせたいと思っています。     この方法について教えてくださいますようお願いします。

  • [VBA]2つの異なるリストを1つにまとめる

    こちらの識者の方々にはいつもお世話になっています。 Excel VBAの質問です。 環境は下記になります。 OS=windows7 Pro SP1 Office=Excel2010(14.0.7128.5000) 下記のような2つのExcelベースのDBがあり、一部のフィールドは重複しています。 レコードも一部重複しています。 それを一つにまとめて、DB(完成形)のようにしたいのですが、どのようなコードが適していますでしょうか? 一旦配列に取り込んで、連想配列を使って・・・と考えたのですが、新しいレコードを配列内に追加するのはいいとしても、 Filter関数では配列内の要素数までは調べられないようなので、既に存在する要素に対してあたらしい値を格納できないし・・・ となって頓挫しています。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • EXCEL VBAで、EXCELの入力規則でリストに設定された内容をすべて取得したい

    EXCEL2003を使っています。 EXCELシートのあるセルに対し、入力規則が以下のように設定されています。 ・入力値の種類:「リスト」 ・データ:複数の値を直接設定(「りんご,みかん,もも」のような形式) このとき、リストに設定されているすべての値をVBAで取得したいと思っています。 入力規則で設定されている内容を取得する方法をご存知の方、ご教示いただけますでしょうか。 そもそも入力規則で設定されている内容を取得することは可能なのでしょうか。 よろしくお願いいたします。

  • Excelのセルをリストから入力

    Excel2000ユーザーです。 任意のセルをリストからデータ入力(選択)するように設定した場合、リストに含まれない値を入力する方法はありますか? ■現状 [データ]→[入力規則]で入力規則プロパティ画面を表示し、 「入力規則の種類」:リスト 「元の値」:リストに含めるデータ 「ドロップダウンメニューから選択する」にチェック と設定しています。

  • エクセル2010 リストボックス初期値

    エクセルに詳しい方よろしくお願い致します。 エクセル2010または2013で データー → データー入力規則 → データーの入力規則(リスト) でリストボックスを各行(64行)に作りました。 このリストボックスを一括(全ての行)で初期値(全ての行が同じリストの値の位置)に 戻す方法はありますか? マクロの記録では何も記録されませんでした。 どうかご教授よろしくお願い致します。

  • エクセルのリストについて

    エクセルの入力規則にあるリストについて質問です。 データ>入力規則から、『入力値の種類』を”リスト”にし、『元の値』を指定する際、 『元の値』の数が増える可能性があるので、ある程度多めの行を指定しておいて、 『元の値』の数が増えても入力規則の設定の変更をしなくても良い様にしたいのですが、 これをやると、リストの表示に空白セルが表示されてしまいます。 空白セルの分はリストに表示させない事は可能でしょうか。

  • VBAでセルに値が入ったときにイベントを起こしたい

    VBAでタイトルのことをやりたいのですがどうやったらいいのか全く思いつきません。どなたかヒントをいただけないでしょうか? B列の10行目から2000行までの間限定で、5行ごとのセルに値を入れたときに動くようにしたいんです。 例としてB10に値が入ったらA10から下に連番をふります。(1から5) B15に値が入ったらその続きを入れたいんです(6から10) どのようにしたらいいでしょうか?

  • エクセルのリスト表示につきまして

    EXCEL2000の入力規則において、リストから選択できるよう 下記のように指定しました。  =INDIRECT("マスタシート!A4:A303") 上位3行目まで(マスタシートのA4からA6まで) 値があったとしたら、リストを表示させたとき、 初期の選択項目はNULLになっており、値の無い 4行目が初期の選択項目となっております。 上にずらさないと、選択できる項目は表示されません。 バッファとして303行目までとっておりますが、 全項目に値が入っていない場合の現象です。 どうすれば一番上から表示されるようになりますか? ご回答のほど、どうぞよろしくお願いいたします。

  • Excel VBAでの名前の使い方

    Win7/Excel 2010で、セル範囲に名前を付け、VBAでデータを使おうと思います。セル範囲内の特定のセルの値を使おうと思いますが、方法はあるでしょうか? 行・列番号で、データを呼び出すプログラムでは、他の部分でセルの追加、削除をしたときでも、行列番号がずれてしまい、プログラムをその都度書き換える必要があります。セル範囲の名前を用い、範囲内のどの位置かを指定することができれば、プログラムを変える必要がなくなります。セルの1つづつに名前を付ければ、可能ですが、この場合、配列として取扱い難くなってしまいます。

専門家に質問してみよう