重複削除(Scripting.Dictionary)●はじめに今回は、Dictionary(連想配列)の使い方を説明いたします。連想配列を理解する事で、重複の無いリストを作る方法やデータを配列に登録したデータを簡単に集計する事も出来ます。それでは、順番にサンプルプログラムを交えて説明いたします。UBound)の基礎については、下記を参照して下さい。UBound)●2次元配列・セル範囲の内容を配列に格納・配列の内容をセルに代入(一括・高速化・セルの指定範囲)については、下記を参照して下さい。2次元配列・セル範囲の内容を配列に格納・配列の内容をセルに代入(一括・高速化・セルの指定範囲)●連想配列の応用:クロス集計表等は下記を参照してください。Dictionaryオブジェクトを利用するには、下記の通りに設定を行います。CreateObject(“Scripting.Dictionary”)格納されるデータをキー・アイテムのペアを保持するオブジェクトです。配列として登録されるインデックス番号は、0~1・2・3・・・と整数で順番に割り当てられます。オブジェクトに新しいキー/アイテムのペアを追加します。(登録するデータは、キー・アイテム一緒に登録します。オブジェクト内に同じデータが存在するかどうかを返します。オブジェクト内のすべてのアイテム(Items)の配列を返します。アイテムの場合は、データ重複しても大丈夫です。オブジェクト内のすべてのキー(Keys)の配列を返します。キー(Keys)については、重複したキーを登録するは出来ません。オブジェクトから、指定したキー/アイテムの選択したペアを削除します。オブジェクト内の全てのキー/アイテムのペアを削除します。(登録したデータがクリアされます。オブジェクト内でキーを比較するために比較モードを設定するか返します。キーを比較する際にあいまい検索を許可するか指定します。文字の全角・半角を区別します。文字の全角・半角を区別しません。オブジェクト内のキー/アイテムのペアの数を返します。オブジェクト内のアイテムの値を設定するか返します。オブジェクト内の既存のキー値に対して新しいキー値を設定します。'Dictionaryオブジェクトを設定します。'設定した連想配列に登録します。'キーを指定(日本)して、該当するアイテムを表示します。'Dictionaryオブジェクトを設定します。'設定した連想配列に登録します。'キーを指定(日本)して、該当するアイテムを表示します。するキー(Key)については、同じ文字列等で重複の登録は、出来ません。アイテム(Item)については、同じ文字列での登録は可能です。(サンプル1)下記のサンプルプログラムは、連想配列の登録方法と登録した連想配列データとメッセージボックスに表示する方法を説明いたします。登録されたデータをメッセージボックスに順番に表示します。'登録した連想配列データをメッセージボックスに表示します。'登録した連想配列データをメッセージボックスに表示します。'Dictionaryオブジェクトを設定します。Dict.keys'キーの一覧を取得する。'配列データの0~2まで繰り返す。'メッセージボックスに登録したキー・アイテムを表示します。'登録した連想配列データをメッセージボックスに表示します。'Dictionaryオブジェクトを設定します。Dict.keys'キーの一覧を取得する。'配列データの0~2まで繰り返す。'メッセージボックスに登録したキー・アイテムを表示します。※プログラム実行後、順番に取り込んだ配列データを順番にメッセージボックスに表示しました。(サンプル2)下記のサンプルプログラムは、A列の「勘定科目」が重複登録されています。このA列のデータを元に、B列に重複されていない勘定科目データを表示するサンプルプログラムです。【プログラム説明・処理手順】1A列のデータ(勘定科目)を全て読み取ります。2A列のデータを1件ずつ確認して既に登録されていないかを確認(新規の場合は、辞書登録(配列に登録)・既に登録されている場合は、何もしない)3辞書登録(配列に登録)されている一覧データをB列に転記します。'キー(辞書登録)の一覧を取得する。'辞書登録された件数分繰り返します。'B列へ辞書登録(配列)データを順番に転記します。'キー(辞書登録)の一覧を取得する。'辞書登録された件数分繰り返します。'B列へ辞書登録(配列)データを順番に転記します。※プログラム実行後、A列の重複されているデータをB列に重複されていない勘定科目一覧が表示されました。(サンプル3)下記のサンプルプログラムは、上記のサンプル2と同じ重複データを削除するサンプルプログラムです。今回のサンプルプログラムは、キーとアイテムに部分にデータを登録を行い、キーデータ部分に対して重複データの削除を行います。A列の「銀行コード」が重複登録されています。このA列のデータを元に、D列に重複データの無い「銀行コード」データ(キー)とアイテム部分「銀行名」をE列に表示させます。【プログラム説明・処理手順】1A列のデータ(キー)「銀行コード」とB列のデータ(アイテム)「銀行名」部分を全て読み取ります。2A列のデータ(キー)「銀行コード」を1件ずつ確認して既に登録されていないかを確認(新規の場合は、辞書登録(配列に登録(追加))・既に登録されている場合は、何もしない)3辞書登録(配列に登録)されている一覧データをD列(キー)「銀行コード」・E列(アイテム)「銀行名」を転記します。※データを配列(連想配列)として登録する際は、A列のキー(銀行コード)とB列のアイテム(銀行名)を同時に登録(追加)します。'A列の最終行まで繰り返す。Dict.keys'キー・アイテム(辞書登録)の一覧を取得する。'辞書登録された件数分繰り返します。'D列へ辞書登録(キー)データを順番に転記します。'E列へ辞書登録(アイテム)データを順番に転記します。'A列の最終行まで繰り返す。Dict.keys'キー・アイテム(辞書登録)の一覧を取得する。'辞書登録された件数分繰り返します。'D列へ辞書登録(キー)データを順番に転記します。'E列へ辞書登録(アイテム)データを順番に転記します。※プログラム実行後、A列の「銀行コード」とB列の「銀行名」を読み取り(配列登録)、D列に「銀行コード」と「銀行名」が重複データの削除されて表示されました。(サンプル4)下記のサンプルプログラムは、選択したデータを読み取り、重複データ(勘定科目)の削除を行い、勘定科目ごとに金額を集計するサンプルプログラムです。【プログラム説明・処理手順】1B列のデータ(キー)「勘定科目」を全て順番に読み取ります。2B列のデータ(キー)「勘定科目」を1件ずつ確認して既に登録されていないかを確認します。・新規の場合は、辞書登録(配列に登録・追加))F列に勘定科目とG列に金額をセルに記入します。・既に登録されている場合は、F列に登録されている勘定科目と同じ行に、金額を加算します。3最後まで、データを順番に読み取り終わったら、F列・G列の1行目に項目名(勘定科目:合計金額)を付けます。4F列・G列の最終行に合計値を記入して、集計された勘定科目範囲に、囲線を引きます。'勘定科目一覧データから勘定科目毎に集計します。'勘定科目一覧データから勘定科目毎に集計します。勘定科目の合計値をクリアします。'勘定科目の確認(無い場合は、勘定科目と合計額の行番号を登録します。'勘定科目・合計額の行を加算する。'全ての金額を加算して合計額を襲名します。'集計した合計額を合計表の最終行に代入します。'勘定科目一覧データから勘定科目毎に集計します。勘定科目の合計値をクリアします。NumberElse'勘定科目の確認(無い場合は、勘定科目と合計額の行番号を登録します。'勘定科目・合計額の行を加算する。'全ての金額を加算して合計額を襲名します。'集計した合計額を合計表の最終行に代入します。※プログラム実行後、選択したデータを読み取り、重複データ(勘定科目)の削除を行い、F列に勘定科目・G列に金額ごと集計され、合計表示されました。(サンプル5)下記のサンプルプログラムは、選択したデータを読み取り、重複データ(勘定科目)の削除を行い、勘定科目ごとに金額を集計するサンプルプログラムです。全体的な処理内容は、サンプル4と同じような作りですが、今回は、集計方法を「支店名+勘定科目」の組み合わせで集計を行い、結果を別シートに作成します。【プログラム説明・処理手順】1ワークシート「データ一覧」・B列のデータ(キー)「支店名」+「勘定科目」を全て順番に読み取ります。2ワークシート「データ一覧」・B列のデータ(キー)「支店名」+「勘定科目」を1件ずつ確認して既に登録されていないかを確認します。・新規の場合は、辞書登録(配列に登録・追加))ワークシート「合計表」・F列に勘定科目とG列に金額をセルに記入します。・既に登録されている場合は、ワークシート「合計表」・F列に登録されている「支店名+勘定科目」と同じ行に、金額を加算します。3最後まで、データを順番に読み取り終わったら、F列・G列の1行目に項目名(支店名+勘定科目:合計金額)を付けます。4F列・G列の最終行に合計値を記入して、集計された勘定科目範囲に、囲線を引きます。'勘定科目一覧データから支店名・勘定科目ごと、別シートに集計します。'勘定科目一覧データから支店名・勘定科目ごと、別シートに集計します。勘定科目の合計値をクリアします。'勘定科目の確認(無い場合は、支店名と勘定科目と合計額の行番号を登録します。'勘定科目・合計額の行を加算する。'全ての金額を加算して合計額を襲名します。'集計した合計額を合計表の最終行に代入します。'合計表に罫線を引きます。'勘定科目一覧データから支店名・勘定科目ごと、別シートに集計します。勘定科目の合計値をクリアします。NumberElse'勘定科目の確認(無い場合は、支店名と勘定科目と合計額の行番号を登録します。'勘定科目・合計額の行を加算する。'全ての金額を加算して合計額を襲名します。'集計した合計額を合計表の最終行に代入します。'合計表に罫線を引きます。ごとに一意データのデータとして集計され、別シート「合計表」へ集計結果が表示されました。(画面クリックして拡大)最後まで、ご覧いただきまして誠に有難うございました。VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。指定した行列に小計を追加する。指定した行列に小計を追加する。指定した行列に小計を追加する。指定した表を自動的に背景色をゼブラ模様(縞模様)にする。Functionプロシージャを使いこなす。便利なVBAコード・サンプルプログラム一覧・覚えると便利・効率が上がる。エラーかどうがを判定します。