| 
    
     |  | ▼初心者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
 
 
 |  |