VBAマクロで辞書を使用してvlookupを実行しようとしています。私はインターネットの周りのいくつかの例を見てきましたが、彼らは主に非常に具体的で、私はより多くの "裸の骨"のコードを支援することを望んでいます。私が達成したいものの単純な例を使用する:「注文」ワークシートのセルB2のダイナミックレンジ開始内の各セルであることVBAマクロで辞書を使用する単純なVLOOKUP
ルックアップ値(下段が変化する)
表アレイは、セルE2に開始し(下の行は異なる)「レポート」ワークシートの列Lに延在するダイナミックレンジになるように
- インデックス数が8であることがある
カラム(列L)
レンジルクーpが偽
私の現在のコードすることは以下です:
Sub DictionaryVLookup()
Dim x, y, z(1 To 10)
Dim i As Long
Dim dict As Object
Dim LastRow As Long
LastRow = Worksheets("Report").Range("B" & Rows.Count).End(xlUp).Row
x = Sheets("Orders").Range("B2:B" & LastRow).Value
y = Sheets("Report").Range("E2:E" & LastRow).Value 'looks up to this range
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(x, 1)
dict.Item(x(i, 1)) = x(i, 1)
Next i
For i = 1 To UBound(y, 1)
If dict.exists(y(i, 1)) Then
z(i) = y(i, 1)
Else
z(i) = "NA"
End If
Next i
Worksheets("Orders").Range("Z2:Z" & LastRow).Value = Application.Transpose(z) 'this is where the values are placed
End Sub
私は「検索」の部分が欠けているように見える、現在これはエラーなしで実行され、シンプルな場所「発見された値"を参照してください。しかし、戻り値をどのようにオフセットするかは分かりません(この例では列Lを返す)。
はまた、私はこのコードの一部の「フランケンシュタイン」の仕事をしてくれました - ので、これが存在している私はなぜわからない:
Dim x, y, z(1 To 10)
(1〜10)私が推測する動的なものになるでしょう。
これは、このような方法で辞書を使用する私の最初の試みです。この単純な例を通して基本的な理解を得て、もっと複雑な状況に実装することができます。
私が記述していることを実行する他の方法はありますが、辞書について特に学びたいと思っています。
ありがとうございました!このような
両方のシートが行の同じ番号を持っていますか?あなたは1つの 'LastRow'変数しか持っていません...あなたがここで何をしているのかがはっきりしていません。 –
@TimWilliams単純な例では、両方のシートに同じ数の行があります。そうでない場合は、2番目のシートに「LastRowTwo」を追加します。辞書を使用して基本的なVLOOKUPを実行しようとしています – RugsKid
ルックアップをしようとしていますが、コードではわかりません –