2017-09-25 17 views
1

3つの異なる範囲で異なる値(テキスト)を検索したいと思います。 私は方法をオンラインで見つけたと思うが、それは私に誤りを与える。Excel VBA複数の範囲から異なる値を計算

ここにコードがあります。

Dim MyDict As Object, MyCols As Variant, OutCol As String, LastRowXY_2 As Long 
Dim XY_A As Variant, I_XY As Long, MyData_XY As Variant 

Set MyDict = CreateObject("Scripting.Dictionary") 
MyCols = Array("P", "S", "V") 
OutCol = "AN" 

For Each XY_A In MyCols 
    LastRowXY_2 = Worksheets(Ders_Sheet_Adi).Cells(Rows.Count, XY_A).End(xlUp).Row 
    MyData_XY = Worksheets(Ders_Sheet_Adi).Range(XY_A & "22:" & XY_A & LastRowXY_2).Value 
    For I_XY = 1 To UBound(MyData_XY) 
     If MyData_XY(I_XY, 1) <> "" Then MyDict(MyData_XY(I_XY, 1)) = 1 
    Next I_XY 
Next XY_A 

Worksheets(Ders_Sheet_Adi).Range(OutCol & "1").Resize(MyDict.Count, 1).Value = WorksheetFunction.Transpose(MyDict.keys) 

"XY_A"の2回目の実行では、MyData_XYは「型不一致」エラーを返します。

私はどんな考えでも使用できます。

+0

チェックデバッグモードで第二のループでは、 'LastRowXY_2' –

+0

の値が何であるかを第二のループでは、LastRowXY_2の値はその「22」 – Bildircin13

+0

ですデバッグモードで 'MyData_XY'(Empty)の何を取得しているのかを確認します。 –

答えて

1

オプション1:

変更:

Worksheets(Ders_Sheet_Adi).Range(OutCol & "1").Resize(MyDict.Count, 1).Value = WorksheetFunction.Transpose(MyDict.keys)

Range(OutCol & "1").Resize(1, 1).Value = WorksheetFunction.Transpose(2)

にし、それが今で動作するかどうかを確認してください。存在する場合は、 MyDictに値がないため、エラーが発生します。

オプション2: あなたはMyData_XYは何だと思いますか?範囲、配列? このようにそれを呼び出すようにしてください - >MyData_XY(1)(1,1)これに代えて - >MyData_XY(1,1)

+0

答えはThxです。残念ながら、最初のオプションは、その行の前にエラーが発生するため、何の効果もありませんでした。そして私は恐れている第二の選択肢を理解できませんでした。 – Bildircin13

+0

@ Bildircin13 - オプション2について - あなたの配列には配列があります。あなたはこれを - > 'MyData_XY(1,1)'のように参照しています。あなたはこれを 'MyData(1)(1,1)'のように参照すべきです – Vityata

関連する問題