2017-09-25 79 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”的第二次运行中,MyData_XY给出了“类型不匹配”错误。

我可以使用任何形式的想法。

+0

检查什么的'LastRowXY_2' –

+0

在第二循环中的价值,LastRowXY_2的值是“22” – Bildircin13

+0

所以现在调试并查看“MyData_XY”(空) –

回答

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