[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Dictionary』(xy)
[[20170508211130]] のマナさんのマクロを Dictionaryを使用すると
どのようなマクロで書くのでしょうか
< 使用 Excel:unknown、使用 OS:unknown >
>Dictionaryを使用すると
私は、その必要性を余り感じないのですが、 Dictionaryを使用した例が知りたい理由を教えて頂けませんか?
それによって書き方も違ってくるような気がします。 (兎に角、使えばいいってものでもないですよね?)
(半平太) 2017/05/09(火) 13:33
ですが、リンク先の例では、親の名前に対する子の名前を列挙、というケースですよね。これだと、親の名前をキーにすれば?、と思うかも知れませんが、キーは重複してはいけない原則があるので、そういう使い方はできません。なので、Dictionaryを使うのは逆効果であり、考えるだけ無駄、という事になります。
(???) 2017/05/09(火) 14:05
・既存の親なら、得られた行位置を利用。子の人数を+1。
・新規の親なら、最終行に+1してから、両方の辞書に1項目追加。
(???) 2017/05/09(火) 15:02
半平太様、???様 たいへん失礼しました。 (マナ)さんのマクロを例題として、Dictionaryを理解しようと思いました。 失礼しました。 (xy) 2017/05/09(火) 15:35
>(マナ)さんのマクロを例題として、Dictionaryを理解しようと思いました。
そこなんですけど、何故この例題にDictionaryが使えそうと思ったのですか? それが肝心なんですけど。
一般論としては、Dictionary はアッチコッチにあるキーを統合して処理するのが得意技ですよね? しかし、くだんの例題は、既にキー(=整理番号)が一塊になってるんですから、名寄せの必要はないですよね?
そちらの動機が見えなければ、こちらも(目標が見えていないのですから)アイデアを出しようもないです。 今回、フリガナ問題および異なった家族構成の問題を孕んでいますので、 多分、そこに絡めた動機をお聞かせいただけるのかなと思っています。
(半平太) 2017/05/09(火) 16:35
たぶん、カリーニンさんが引用された [[20170326090845]]
で、βさんが、Dictionaryを使ったコードを提示されていたからかも。
深い意味はなく、Dictionaryの勉強でしょうか?
こんな感じで、使ってみました。
Option Explicit
Sub test() Dim dic As Object Dim c As Range Dim n As Long Dim m As Long
Set dic = CreateObject("scripting.dictionary")
For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp)) n = c.Value If Not dic.exists(n) Then Set dic(n) = c.Offset(, 2) Else Set dic(n) = Union(dic(n), c.Offset(, 2)) End If Next
Range ("E1"), CurrentRegion.ClearContents Columns("A:B").Copy Range("E1") Columns("E:F").RemoveDuplicates Columns:=1
For Each c In Range("E2", Range("E" & Rows.Count).End(xlUp)) n = c.Value dic(n).Copy c.Offset(, 2).PasteSpecial Transpose:=True m = WorksheetFunction.Max(m, dic(n).Count) Next
With Range("G1") .Value = "子1" .AutoFill .Resize(, m) End With
End Sub
(マナ) 2017/05/09(火) 19:58
マナ様
私なりに みなおしてみました。
ありがとうございました。
お二人のご親切な対応に感謝します。
(xy) 2017/05/10(水) 14:36
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.