2

VBA で、Collection次のような名前付きの Cを作成しました。

Key      Item
Thing1   12
Thing2   15
Thing4   7
Thing6   3

私の Excel ファイルでは、Sheet1 は次のようになります。

A        B
Thing1
Thing2
Thing3
Thing4
Thing5
Thing6

C の各キーを調べて、列 A を検索し、見つかった場合は項目を列 B に入れたいと思います。結果は次のようになります。

A        B
Thing1   12
Thing2   15
Thing3
Thing4   7
Thing5
Thing6   3

私は最初、コレクションをループしてキーを取得し、「A:A」で一致を検索してから、「B#」をアイテム値に設定することでこれを行うと考えていました..構文がわかりません. もっと読んだ後、値にアクセスできないと思いKeyます。

Dim Count as Integer
Dim ItemToFind as String
Dim i as Integer

For Count = 1 to C.Count
    ItemToFind = C.Key(count) 'I don't think C.Key is a valid thing
    for i = 1 to 50 'there are less than 50 rows in Sheet1 to look thru        
        If Cells("A" & i).Value = ItemToFind Then
            Cells("B" & i).Value = C.Key(count)
        End If
    Next i
Next Count

?Classを使用する代わりに、新しいものを作成する必要があるのではないかと考えています。Collectionどんな助けでも大歓迎です!

編集: オブジェクトを使用しようとしていDictionaryます。ディクショナリに項目を追加してキーを取得することはできますが、Excel セルの値がディクショナリ キーであるかどうかを確認すると、実行時エラーが発生します。

「dict」という名前の辞書があり、これにキーと値をロードしました:

dict.Add Key:=Thing, Item:=TotalThings

このコードを使用して Dictionary アイテムをループし、ワークシートの列 A に存在するかどうかを確認しています。

Dim Count as Integer
Dim KeyToFind as String
Dim i as Integer

For Count = 1 to dict.Count
    KeyToFind = dict.Keys(count)

    For i = 1 To 50
        If oExcel.Worksheets(1).Cells("A" & i).Value = KeyToFind Then
            oExcel.Worksheets(1).Cells("B" & i).Value = dict.Item(Count)
        End If
    Next i
Next Count

実行If oExcel.Worksheets(1).Cells("A" & i).Value = KeyToFind Then時エラー 1004: アプリケーション定義またはオブジェクト定義のエラーが発生します。デバッグ モードで KeyToFind にカーソルを合わせると、ディクショナリの最初のキーが含まれています。

4

1 に答える 1

3

コレクションから辞書に切り替えるという賢明な選択をしたと思います。辞書には.Exists便利なメソッドがあります。このスニペットを検討してください。

Dim dct As Object
Set dct = CreateObject("Scripting.Dictionary")
dct.Add "Thing1", 12
dct.Add "Thing2", 15
dct.Add "Thing4", 7
dct.Add "Thing6", 3
Debug.Print dct.Exists("BogusThing") ' returns False

次に、シートの各列 A 値で使用できますdct.Exists...そのキーが辞書に存在する場合は、一致する値を列 B に保存します。

これは正確ではないかもしれませんが、うまくいけば、始めるのに十分近いでしょう.

Const lngRows As Long = 50
Dim objSheet As Object
Dim strKey As String

Set objSheet = oExcel.Worksheets(1) ' you know where oExcel comes from
Dim i As Long
For i = 1 To lngRows
    'strKey = objSheet.Cells("A" & i).value ' oops
    strKey = objSheet.Cells(i, 1).value
    If dct.Exists(strKey) Then
        'objSheet.Cells("B" & i).value = dct(strKey) ' oops again
        objSheet.Cells(i, 2).value = dct(strKey)
    End If
Next i
于 2013-04-25T16:10:07.260 に答える