Excel VBA IT備忘録

【ExcelVBA】Dictionaryオブジェクトを使って連想配列

投稿日:2017年6月20日 更新日:

部署・取引先・売上・差益と並んだエクセルがあるとする。

部署取引先コード売上差益
111000015,000,000500,000
111000023,000,000300,000
111000032,000,000200,000
11200213500,00050,000
11200239400,00040,000
11200347788,70078,000
11304787500,00050,000
113037842,000,000200,000
113047831,000,000100,000

 

こんな表を部署ごとに売上を集計して配列に持ちたいということはないだろうか。例えば、1110は売上計10,000,000。1120は売上計1,688,700・・のように。

 

何でこんなことを言うかというと、私の場合、これを使って部署ごとの売上順位表を作ろうという話なのだ。これに利益率と部署全体の売上に対する比率の列を含めて、部署ごとに別シートで作成しようとするとき、利率は差益÷売上なので簡単に出来るのだが、売上の比率はそうはいかない。

 

部署順・売上降順にならんでいるので一番上が1位になるだからお膳立ては十分だ。ForEachで2行目から最終行まで順に読んでシートに代入し、部署が切り替わったら別シートを作成する・・・とやるつもりだが、一行一行読むタイミングで部署全体に対する売上の比率を出すとなると、部署ごとの全体売上を一行一行読む前に知っておかなければいけない。

 

このとき、1110の合計金額、1120の合計金額、1130の合計金額という連想配列があればありがたいと思ったわけだ。理由はなんでもいいだろうが、私の連想配列を使いたいといった理由はそういうことだ。

 

コードはこれだ。

 

これでMsgBoxでもなんでもいい。Dic.Item(“1110”)で合計金額が表示される。そこまで出来れば後はなんでも使えるだろう。

 

ネットでは部署コードをサマリーする目的など(いわゆるDistinct)で説明が見つかったが、それじゃ足らないんだ。

 

だが、これで連想配列に入れた取り出し方が解るだろう。あくまで忘備録だ。人様に見せる代物じゃない。

スポンサーリンク




スポンサーリンク




-Excel VBA, IT備忘録

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

残業を無くしたい人に伝えたいExcelVBAの存在 エクセルプログラミング

簡単に自己紹介から 現在私は会社のIT部門でプログラムを書く仕事をやっていますが、約4年前は広島で営業補佐の仕事をやっていました。要するに事務職ですね。   広島というと地方になるのですが、 …

このスクリーンセーバーには、より新しい種類のビデオカードまたはDirect3D・・・

職業柄パソコンをセッティングする機会が多いのだが、過去にある一台がスクリーンセーバーの設定のとき、 「このスクリーンセーバーには、より新しい種類のビデオカードまたはDirect3Dと互換性のあるビデオ …

Windows 右クリックからの送るに起動したいプログラムを登録する

やり方 ファイル名を指定して実行を開き(Winキー+R)、 shell:sendto と入力してエンターキーを押す。フォルダが開くのでその中にプログラムのショートカットを入れる。   使い道 …

Windows ハードディスクのデータを完全に削除して復元できなくする

やり方 ファイル名を指定して実行を開く(Winキー+Rキー)、コマンドプロンプトを開く(cmdと入力してエンターキー) cipherコマンドを使う。Dドライブをクリアしたい場合は、 [crayon-5 …

XAMPP Windows 複数のPHPバージョンを切り替える 共存

なんちゃってWebプログラマーの俺が、会社でなんちゃってプログラムを作っている話なので、話半分に聞いてほしい。というか、自分の備忘録です。   会社の基幹サーバに対してWebで照会するプログ …