|
▼初心者M さん:
>質問の趣旨から外れてしまうのですが、問題があるとすれば、運用する私の知識が全然追いついていないという1点です。
>kanabunさんの様に、知識と技術のある親切な方にいつでも頼れるわけではないので、なんとか自分でも「こういうコードを使えば、こういうことができる」という知識を身につけたいのですが、どのような部分から手を付ければよいか、ご参考までにお教え頂けないでしょうか。例えば、「数値が入っているか」を判別するためにWorksheetFunctionを使うなど、私では到底思いつきません。
これはぼくからの非常に個人的なお願いなのですが、
ぜひ習得してほしいのは Dictionaryオブジェクトの利用法です。
こちらはDictionaryの利便性、高速性にどっぷりつかっているので、
AdvancedFilter や ピボットテーブルの分野まで侵入して
Dictionaryを使ったコードを書くことがあります。
質問者のかたが Dictionaryをまるで知らないと、そのコードは
タダで作ってもらった変更の利かない道具ですが、すこしでも
Dictionaryを使ったコードの書き方をみていると、ははぁ、こ
こで、こういうふうにDictionaryを使うのだな。では、それを
まねて、こういう目的のためにDictionaryを使ってやろう。
という気になってきますので、かいとうする側としては非常に
提示しがいのある回答になります。
Dictionaryを一から説明せよ、と言われても、それはなかなか
難しいです。
具体例とともに、少しずつ慣れていくのが得策かと思います。
ぼくがそうでしたから。
●Dictionaryオブジェクトを使うと重複のあるリストから、一意の
リストを取得することができます。
みかん みかん
りんご りんご
バナナ バナナ
みかん ==⇒ なし
なし
バナナ
みかん
● Dictionaryオブジェクトを使うと(今回のように)キーの
出現回数をカウントすることもできます。
For Each key In リスト
dic(key) = dic(key) + 1
Next
[F1].Resize(dic.Count, 2).Value = Application.Transpose( _
Array(dic.Keys(), dic.Items())
● Dictionaryオブジェクトを使うと、集計作業ができます。
品名 売上
みかん 1000
りんご 1200
バナナ 1500
みかん 2000
なし 1000
バナナ 5000
みかん 2000
For Each 品名 In テーブル.列(1)
dic(品名) = dic(品名) + 売上
Next
[F1].Resize(dic.Count, 2).Value = Application.Transpose( _
Array(dic.Keys(), dic.Items())
参考サイト
ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html
ht tp://officetanaka.net/excel/vba/tips/tips80.htm
|
|