Arrays VBA从另一个数组填充数组

Arrays VBA从另一个数组填充数组,arrays,vba,Arrays,Vba,我正在尝试使用以下代码获取一个最终数组,该数组填充了唯一键,其中包含来自现有二维数组的值: 最后一个数组有3个数据维度,我希望数组如下所示: 最后一行(0):{a,1,4,8}。。。。最后一行(4):{e,空,空,12} 我的代码使用键a、b、c、d、e初始化上面的数组,但我不确定最好的填充方式是什么 假设每个“a”条目都是新行 我目前的尝试(但非常手动)是选择“e”: 子阵列测试() 作为变体的Dim-dekeys 变光数据(0到2,0到3)作为变量 暗rRef As范围 将DData作为变体

我正在尝试使用以下代码获取一个最终数组,该数组填充了唯一键,其中包含来自现有二维数组的值: 最后一个数组有3个数据维度,我希望数组如下所示:

最后一行(0):{a,1,4,8}。。。。最后一行(4):{e,空,空,12}

我的代码使用键a、b、c、d、e初始化上面的数组,但我不确定最好的填充方式是什么

假设每个“a”条目都是新行

我目前的尝试(但非常手动)是选择“e”:

子阵列测试()
作为变体的Dim-dekeys
变光数据(0到2,0到3)作为变量
暗rRef As范围
将DData作为变体
作为变体的Darray
作为整数的Dim i
作为变体的暗淡独特的眼睛
暗终射线
作为整数的Dim常量
PreservedKeys=数组(“a”、“b”、“c”、“a”、“b”、“c”、“d”、“a”、“b”、“c”、“d”、“e”)
PreservedData=Array(1,2,3,4,5,6,7,8,9,10,11,12)
常数=3
重拨合并Darray(0到UBound(保留键),0到1)
对于i=0到UBound(保留键)
合并Darray(i,0)=保留的Dkeys(i)
合并数据(i,1)=保留数据(i)
接下来我
uniquePreservedKeys=M_snb(PreservedKeys)
重播最终光线(0到UBound(唯一保留键),0到常量)
对于i=0到4
最终射线(i,0)=唯一保留射线(i)
接下来我
Set rRef=Application.Range(“TestRange”)
rRef.Resize(UBound(数据,1)+1,UBound(数据,2)+1)=数据
'到目前为止,我的尝试-->非常手动,仅获取e条目
如果MergedArray(i,0)=“a”,那么
计数器=计数器+1
如果结束
如果计数器=1,则
如果合并Darray(i,0)“e”,则
最终射线(4,计数器)=“
其他的
最终光线(4,计数器)=合并光线(i,1)
如果结束
如果结束
如果计数器=3,则
如果合并Darray(i,0)“e”,则
最终射线(4,计数器)=“
其他的
最终光线(4,计数器)=合并光线(i,1)
如果结束
如果结束
接下来我
端接头
功能M_snb(作为变体的唯一键)
使用CreateObject(“scripting.dictionary”)
对于每一个,它都是唯一的
c10=.Item(it)
下一个
an=.keys'数组。keys包含所有唯一的键
以
M_snb=an
端函数
子阵列测试()
作为变体的Dim-dekeys
变光数据(0到2,0到3)作为变量
暗rRef As范围
将DData作为变体
作为变体的Darray
作为整数的Dim i
作为变体的暗淡独特的眼睛
暗终射线
作为整数的Dim常量
PreservedKeys=数组(“a”、“b”、“c”、“a”、“b”、“c”、“d”、“a”、“b”、“c”、“d”、“e”)
PreservedData=Array(1,2,3,4,5,6,7,8,9,10,11,12)
常数=3
重拨合并Darray(0到UBound(保留键),0到1)
对于i=0到UBound(保留键)
合并Darray(i,0)=保留的Dkeys(i)
合并数据(i,1)=保留数据(i)
接下来我
uniquePreservedKeys=M_snb(PreservedKeys)
重播最终光线(0到UBound(唯一保留键),0到常量)
对于i=0到4
最终射线(i,0)=唯一保留射线(i)
接下来我
对于i=0到UBound(最终射线)
计数器=0
对于k=0到UBound(合并Darray)
如果MergedArray(k,0)=“a”,那么
计数器=计数器+1
如果结束
如果MergedArray(k,0)FinalArray(i,0),那么
转到标签
其他的
最终射线(i,计数器)=合并射线(k,1)
如果结束
标签:
下一个k
接下来我
Set rRef=Application.Range(“TestRange”)
rRef.Resize(UBound(FinalArray,1)+1,UBound(FinalArray,2)+1)=FinalArray
端接头
功能M_snb(作为变体的唯一键)
使用CreateObject(“scripting.dictionary”)
对于每一个,它都是唯一的
c10=.Item(it)
下一个
an=.keys'数组。keys包含所有唯一的键
以
M_snb=an
端函数
子阵列测试()
作为变体的Dim-dekeys
变光数据(0到2,0到3)作为变量
暗rRef As范围
将DData作为变体
作为变体的Darray
作为整数的Dim i
作为变体的暗淡独特的眼睛
暗终射线
作为整数的Dim常量
PreservedKeys=数组(“a”、“b”、“c”、“a”、“b”、“c”、“d”、“a”、“b”、“c”、“d”、“e”)
PreservedData=Array(1,2,3,4,5,6,7,8,9,10,11,12)
常数=3
重拨合并Darray(0到UBound(保留键),0到1)
对于i=0到UBound(保留键)
合并Darray(i,0)=保留的Dkeys(i)
合并数据(i,1)=保留数据(i)
接下来我
uniquePreservedKeys=M_snb(PreservedKeys)
重播最终光线(0到UBound(唯一保留键),0到常量)
对于i=0到4
最终射线(i,0)=唯一保留射线(i)
接下来我
对于i=0到UBound(最终射线)
计数器=0
对于k=0到UBound(合并Darray)
如果MergedArray(k,0)=“a”,那么
计数器=计数器+1
如果结束
如果MergedArray(k,0)FinalArray(i,0),那么
转到标签
其他的
最终射线(i,计数器)=合并射线(k,1)
如果结束
标签:
下一个k
接下来我
Set rRef=Application.Range(“TestRange”)
rRef.Resize(UBound(FinalArray,1)+1,UBound(FinalArray,2)+1)=FinalArray
端接头
功能M_snb(作为变体的唯一键)
使用CreateObject(“scripting.dictionary”)
对于每一个,它都是唯一的
c10=.Item(it)
下一个
an=.keys'数组。keys包含所有唯一的键
以
M_snb=an
端函数

您是否试图在每行中查找不重复的单元格,并确定其列号?最终我希望a、b、CD、e作为列,条目作为行,但要做到这一点,我需要输出最终数组(0):{a、1、4、8}。。。。Finalarray(4):{e,Empty,Empty,12}首先数组。您是否试图查找每行中没有重复项的单元格,并确定它们的列号?最终我希望a,b,cd,e作为列,条目作为行,但要做到这一点,我需要输出Finalarray(0):{a,1,4,8}。。。。最后一行(4):{e,空,空,12}首先是数组。
    Sub ArrayTest()
    Dim PreservedKeys As Variant
    Dim Data(0 To 2, 0 To 3) As Variant
    Dim rRef As Range
    Dim PreservedData As Variant
    Dim MergedArray As Variant
    Dim i As Integer
    Dim uniquePreservedKeys As Variant

    Dim FinalArray
    Dim Constant As Integer

    PreservedKeys = Array("a", "b", "c", "a", "b", "c", "d", "a", "b", "c", "d", "e")
    PreservedData = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
    Constant = 3


    ReDim MergedArray(0 To UBound(PreservedKeys), 0 To 1)

      For i = 0 To UBound(PreservedKeys)

        MergedArray(i, 0) = PreservedKeys(i)
        MergedArray(i, 1) = PreservedData(i)

      Next i


    uniquePreservedKeys = M_snb(PreservedKeys)

    ReDim FinalArray(0 To UBound(uniquePreservedKeys), 0 To Constant)

    For i = 0 To 4
        FinalArray(i, 0) = uniquePreservedKeys(i)
    Next i



    Set rRef = Application.Range("TestRange")

    rRef.Resize(UBound(Data, 1) + 1, UBound(Data, 2) + 1) = Data

    'MY ATTEMPT SO FAR --> Very manual to just get the e entry
        If MergedArray(i, 0) = "a" Then
            counter = counter + 1
        End If

     If counter = 1 Then
       If MergedArray(i, 0) <> "e" Then
           FinalArray(4, counter) = ""
       Else
        FinalArray(4, counter) = MergedArray(i, 1)
       End If
     End If

      If counter = 3 Then
       If MergedArray(i, 0) <> "e" Then
           FinalArray(4, counter) = ""
       Else
        FinalArray(4, counter) = MergedArray(i, 1)
       End If
     End If


     Next i


    End Sub


 Function M_snb(UniqueKeys As Variant)
        With CreateObject("scripting.dictionary")
            For Each it In UniqueKeys
                c10 = .Item(it)
            Next
            an = .keys ' the array .keys contains all unique keys

        End With

    M_snb = an

    End Function
Sub ArrayTest()
Dim PreservedKeys As Variant
Dim Data(0 To 2, 0 To 3) As Variant
Dim rRef As Range
Dim PreservedData As Variant
Dim MergedArray As Variant
Dim i As Integer
Dim uniquePreservedKeys As Variant

Dim FinalArray
Dim Constant As Integer

PreservedKeys = Array("a", "b", "c", "a", "b", "c", "d", "a", "b", "c", "d", "e")
PreservedData = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
Constant = 3


ReDim MergedArray(0 To UBound(PreservedKeys), 0 To 1)

  For i = 0 To UBound(PreservedKeys)

    MergedArray(i, 0) = PreservedKeys(i)
    MergedArray(i, 1) = PreservedData(i)

  Next i


uniquePreservedKeys = M_snb(PreservedKeys)

ReDim FinalArray(0 To UBound(uniquePreservedKeys), 0 To Constant)

For i = 0 To 4
    FinalArray(i, 0) = uniquePreservedKeys(i)
Next i


For i = 0 To UBound(FinalArray)
counter = 0
 For k = 0 To UBound(MergedArray)


    If MergedArray(k, 0) = "a" Then
        counter = counter + 1
    End If
    If MergedArray(k, 0) <> FinalArray(i, 0) Then
       GoTo Label
    Else
    FinalArray(i, counter) = MergedArray(k, 1)
    End If

Label:
 Next k
Next i


Set rRef = Application.Range("TestRange")

rRef.Resize(UBound(FinalArray, 1) + 1, UBound(FinalArray, 2) + 1) = FinalArray



End Sub

Function M_snb(UniqueKeys As Variant)
    With CreateObject("scripting.dictionary")
        For Each it In UniqueKeys
            c10 = .Item(it)
        Next
        an = .keys ' the array .keys contains all unique keys

    End With

M_snb = an

End Function