Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9638 / 76734 ←次へ | 前へ→

【72657】Re:数値範囲のデータから数値がその範囲にあるか、もしくは含むかを調べる方法
発言  T.K  - 12/8/31(金) 15:49 -

引用なし
パスワード
   ▼kanabun さん:
ありがとうございます。ここまでの説明でちょっとずつ仕組みが分かりました。細かい部分がまだ分からないですが、続きの解説楽しみにしています。よろしくお願いします。
>▼T.K さん:
>[sheet1]に 以下のようにあるとします。
>  A    B      C      D   
>1 class  start    end       ID
>2 chr1  1048371    1049797    ER_1_Carrol
>3 chr1  1054645    1055778    ER_2_Carrol
>4 chr1  1285749    1286349    ER_3_Carrol
>5 chr1  243097903  243098610    ER_396_Carrol
>6 chr1  243121865  243122466    ER_397_Carrol
>7 chr1  243604797  243605398    ER_398_Carrol
>8 chr2  250722     251323    ER_399_Carrol
>9 chr2  1650212    1650812    ER_400_Carrol
>10 chr2  1660654    1661254    ER_401_Carrol
>11 chr3  58431890   58432547    ER_756_Carrol
>12 chr3  61588283   61588993    ER_757_Carrol
>13 chr3  61595330   61595989    ER_758_Carrol
>14 chr3  61605662   61606263    ER_759_Carrol
>15 chr3  61649269   61649870    ER_760_Carrol
>16 chr3  61768126   61769266    ER_761_Carrol
>17 chr3  62137944   62138544    ER_762_Carrol
>
>コード【72606】を見てください。
>Dictionary オブジェクトを作成したあとのコードは↓こうなってます。
>>   Set r = Worksheets("Sheet1").Cells(1).CurrentRegion
>>   v = Intersect(r, r.Offset(1)).Value
>まず 「.Cells(1).CurrentRegion」で表領域[A1:D17]が変数rに
>セットされます。2行目で この範囲から先頭行を除外した正味
>データ範囲[A2:D17]の「Value を」変数v に格納します。
>
>さてその次からDictionaryにデータを登録している部分ですが、
>ここは込み入ってる(Dictionaryのなかで また子供のDictionary
>を作ってそれを親のDictionaryのItemに登録しています)ので、
>実際のコードでなく、外側の(最初宣言した)親Dictionaryのやっ
>ていることを説明します。
>外側のdicのやっていることは まずもってA列のclass名から
>《重複しないclass名を取得する》ことです。
>Dictionaryとはバケツの集合のようなものです。ただしそれぞれの
>バケツ表面にはKeyと呼ばれるラベルが貼ってあり、このラベルは
>他のバケツと重複した名前を持つことが許されてません。重複をカ
>ットしたリストを得るにはDictionaryのこの性質を利用します。
>具体的には
>1 class 
>2 chr1 
>3 chr2 
>4 chr1 
>5 chr3 
>6 chr1 
>7 chr2 
>8 chr3 
>のようなリストがあるとき、
>2行目から 8行目までLoopして順に
>  For i = 2 To 8
>    dic("i行目のデータ") = Empty
>  Next
>という構文を使って処理します。たとえば 2行目なら
>    dic("chr1") = Empty
>です。このとき Dictionaryのなかに "chr1" というラベルを
>もったバケツが用意されます。右辺には バケツの中に容れたい
>アイテムを書きますが、今回はとくに内容物は入れないので、
>Emptyとしておきます。
>3行目のとき
>    dic("chr2") = Empty
>が実行され、これでDictionaryのなかは
>   ┃    ┃  ┃    ┃ 
>   ┃    ┃  ┃    ┃ 
>   ┃    ┃  ┃    ┃ 
>   ┃    ┃  ┃    ┃ 
>   ┗━━━━┛  ┗━━━━┛
>    [chr1]      [chr2] 
>のようなイメージになります。[chr1] や [chr2]のバケツに付された
>ラベルのことを Key といい、内容物を Item といいます。今回は
>Itemはどのバケツも「空」です。バケツの中には何でも入れることが
>できます。数値でも、文字でも、なんでも。。。そう、Dictionary
>のItemには またDictionaryオブジェクトを入れることだってできる
>のです(→【72606】ではDictionaryのなかにDictionaryを入れてます)。
>(簡単な例のほうにもどって)
>4行目のとき またKeyは "chr1" で、
>    dic("chr1") = Empty
>を実行しますが、このときは「すでに"chr1"というkeyは在るので
>そのバケツに Empty を入れます」。つまり、何もしない、と同じこと
>になります。こうしてDictionaryにまだ無いときだけ新しいラベル(
>key)をもったバケツが追加されます。
>8行目まで同様の処理を繰り返したあと辞書は以下のようになって
>います。
>   ┃    ┃  ┃    ┃  ┃    ┃ 
>   ┃    ┃  ┃    ┃  ┃    ┃ 
>   ┃    ┃  ┃    ┃  ┃    ┃ 
>   ┃    ┃  ┃    ┃  ┃    ┃ 
>   ┗━━━━┛  ┗━━━━┛  ┗━━━━┛ 
>    [chr1]      [chr2]     [chr3]  
>
>辞書に何項目入っているかは dic.Count でわかります。
>Countプロパティは Keyの数を返します。→ 3
>どんなKey が登録されているのかは Keys()メソッドでリスト
>できます。
>   Dim v As Variant
>   For Each v In dic.Keys()
>     Debug.Print v
>   Next
>こうするとイミディエイト・ウィンドウには
> chr1
> chr2
> chr3
>が表示されます。
>DictionaryはKeyごとの出現回数を調べたいときなどにも
>重宝します。
>さきほどのサンプルデータを使って、
>1 class 
>2 chr1 
>3 chr2 
>4 chr1 
>5 chr3 
>6 chr1 
>7 chr2 
>8 chr3 
>Keyごとの出現回数をカウントするには、
>
>  For i = 2 To 8
>    dic("i行目のデータ") = dic("i行目のデータ") + 1
>  Next
>とします。これを実行した後、
>   Dim v As Variant
>   For Each v In dic.Keys()
>     Debug.Print v, dic(v)
>   Next
>を実行すれば、イミディエイト・ウィンドウには こんどは
> chr1  3
> chr2  2
> chr3  2
>と表示されるはずです。dic(v) は dic.Item(v) の省略された
>書き方で、この文によって vという名の(Keyの,バケツの) Item
>(内容物)が指定されています。
>
>先ほどいいましたように dicの Item には いろんなものを入れる
>ことができます。
>たとえば、"ER_1_Carrol" という名前(Key) のついたバケツに
>{1048371, 1049797} という数値配列を入れるときは
>  dic("ER_1_Carrol") = Array(1048371, 1049797)
>とします。
>  内容物を取り出すときは
>  dic("ER_1_Carrol")(0) とすると 1048371 が、
>  dic("ER_1_Carrol")(0) とすると 1049797 が取り出せます。
>
>たとえば、"chr1"というバケツの内容物にDictionaryを入れようと
>するときは
>  dic("chr1") = CreateObject("Scripting.Dictionary")
>とします。
>
>   ┃    ┃    ┃│  │ ┃ 
>   ┃    ┃    ┃│  │ ┃ 
>   ┃1049797 ┃    ┃│  │ ┃ 
>   ┃1048371 ┃    ┃└──┘ ┃ 
>   ┗━━━━┛    ┗━━━━━┛
>    [ER_1_Carrol]    [chr1]
>
>
>(とりあえず きょうはここまで)
4 hits

【72485】数値範囲のデータから数値がその範囲にあるか、もしくは含むかを調べる方法 T.K 12/8/15(水) 20:24 質問
【72486】Re:数値範囲のデータから数値がその範囲に... UO3 12/8/15(水) 22:09 発言
【72489】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/15(水) 22:38 発言
【72491】Re:数値範囲のデータから数値がその範囲に... UO3 12/8/15(水) 22:48 発言
【72492】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/16(木) 0:37 発言
【72493】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/16(木) 0:51 発言
【72494】Re:数値範囲のデータから数値がその範囲に... UO3 12/8/16(木) 8:16 発言
【72495】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/16(木) 9:03 発言
【72500】Re:数値範囲のデータから数値がその範囲に... UO3 12/8/16(木) 12:54 発言
【72505】Re:数値範囲のデータから数値がその範囲に... UO3 12/8/17(金) 21:25 発言
【72596】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/27(月) 21:46 質問
【72598】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/27(月) 23:55 発言
【72602】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/28(火) 9:51 質問
【72603】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/28(火) 10:07 発言
【72605】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/28(火) 10:12 発言
【72606】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/28(火) 10:38 発言
【72607】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/28(火) 11:27 お礼
【72608】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/28(火) 11:56 お礼
【72630】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 19:29 発言
【72631】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 19:43 発言
【72612】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/28(火) 15:49 質問
【72613】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/28(火) 18:37 質問
【72628】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 18:53 発言
【72629】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 19:12 発言
【72632】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 20:17 発言
【72634】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 21:35 発言
【72635】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/29(水) 21:40 発言
【72657】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/31(金) 15:49 発言
【72659】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/31(金) 16:25 発言
【72660】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/31(金) 17:30 質問
【72664】Re:数値範囲のデータから数値がその範囲に... kanabun 12/8/31(金) 19:35 発言
【72666】Re:数値範囲のデータから数値がその範囲に... T.K 12/8/31(金) 19:45 お礼

9638 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free