2016-06-01 6 views
0

R1C1の数式がキーでセルがアイテムであるが、アイテムを辞書から取得するときにアイテムのキャストに問題がある辞書を作成しようとしています。うまく辞書を作成するために、表示される次のコードを持っているこれまでのところ私:私がいる問題は、辞書内の項目にアクセスしようとしたときセルの辞書

Dim dict As Scripting.Dictionary 
Dim c As Range 

Set dict = New Scripting.Dictionary 

For Each c In ActiveSheet.UsedRange.Cells 
    If Not dict.Exists(c.FormulaR1C1) Then dict.Item(c.FormulaR1C1) = c 
Next c 

、私はどのように見つけ出すように見えることはできませんItemをRange/Cellとしてキャストします。私は「424」次を試してみましたが、ランタイムエラーを取得:

Dim r As Range 
Dim k As Variant 

For Each k In dict.Keys 
    Set r = dict.Item(k) 
Next k 

を必要なオブジェクトはまた、単に範囲としてアイテムを処理すると、物事に.Formulaプロパティを呼び出してみました:

に設定しようとしました
Range("A1").value = "'" & dict.Item(k).Formula 

"オブジェクト"は次のようになります。

Set r = dict.Item(k).Object 

どれも該当しません。項目が単なる文字列ではなくオブジェクトである(または不可能な)辞書を使用する正しい方法は何ですか?

ありがとうございます!

答えて

0

ポイントのカップル:あなたは辞書項目にRangeオブジェクトを追加したい場合は、あなたは、辞書に追加しない場合は、あなた」しているSetキーワードを使用する必要が

  1. それを再度検索する。

  2. 細胞のFormulaR1C1は、ではなく、が使用するのに最適な鍵となります。その理由は、一連のセルで同じ数式を使用していると仮定すると、キーは1回だけ追加されます。これはあなたが望むふるまいかもしれません、もしそうなら、この点を無視してください。そうでない場合は、別のキーを検討する必要があります。

以下のコードを参照してください。私が辞書からセルを取得していることを実証するために、私はセルを着色しました。明らかに、あなたのニーズに合うように変更してください。

Sub AddRangesTdictionary() 
    Dim dict As Object 
    Dim c As Range 

    Set dict = CreateObject("Scripting.Dictionary") 

    For Each c In Range("B1:B4") 
     If Not dict.Exists(c.FormulaR1C1) Then 
      Set dict.Item(c.FormulaR1C1) = c 
     End If 
    Next c 

    For Each k In dict.Keys 
     dict.Item(k).Interior.ColorIndex = 36 
    Next k 
End Sub 
+0

これは完璧です! 'Set dict.Item(k)= c'がトリックをしました!どうしてそれはいつもとても明らかです。 #2の場合、特に「FormulaR1C1」を使用して、「好き」の数式の重複エントリを避けています。私が行っている分析については、G44のC2またはF44からB2を参照している場合、それらは同じです。私は突然B6の代わりにC6からA6を参照している場合にのみ興味があります。あなたが言及したように、それは異なるフォーミュラがミックスに追加されたインスタンスを識別するのを助けています。 ありがとうございました! – Agathron