拆分multidimensional array,然后切片

我有一列path:

C:\Series1\Season1\Ep1 C:\Series1\Season2\Ep1 C:\Series2\Season1\Ep1 C:\Series2\Season2\Ep1 C:\Series3\Season1\Ep1 

我现在想把数组拆分成multidimensional array,所以最终看起来像这样:

 +---+----+---------+---------+-----+ | | 1 | 2 | 3 | 4 | +---+----+---------+---------+-----+ | 1 | C: | Series1 | Season1 | Ep1 | | 2 | C: | Series1 | Season2 | Ep1 | | 3 | C: | Series2 | Season1 | Ep1 | | 4 | C: | Series2 | Season2 | Ep1 | | 5 | C: | Series3 | Season1 | Ep1 | +---+----+---------+---------+-----+ 

然后我有一个函数称为unique(checkArray) ,检查数组中的唯一值的数量。 我想要这个function检查每一列1乘1。

 Debug.Print uniqueValues(Column1) Debug.Print uniqueValues(Column2) Debug.Print uniqueValues(Column3) Debug.Print uniqueValues(Column4) 

我怎样才能把arrays放到这个arrays然后检查?

在这里输入图像说明

 Sub SplitMe() Dim values As Variant values = ActiveSheet.Range("A1:A5") If Not IsArray(values) Then _ Exit Sub Dim r As Integer Dim parts As Variant Dim partsMaxLenght As Integer Dim splitted As Variant ReDim splitted(LBound(values) To UBound(values)) For r = LBound(values) To UBound(values) parts = VBA.Split(values(r, 1), "\") ' Split always returns zero based array so parts is zero based array If UBound(parts) + 1 > partsMaxLenght Then _ partsMaxLenght = UBound(parts) + 1 splitted(r) = parts Next r Dim matrix As Variant Dim c As Integer ReDim matrix(LBound(splitted) To partsMaxLenght, LBound(splitted) To UBound(splitted)) For r = LBound(splitted) To UBound(splitted) parts = splitted(r) For c = 0 To UBound(parts) matrix(c + 1, r) = parts(c) Next c Next r uniqueValues matrix End Sub Private Sub uniqueValues(matrix As Variant) Dim r, c For r = LBound(matrix, 1) To UBound(matrix, 1) For c = LBound(matrix, 2) To UBound(matrix, 2) Debug.Print matrix(r, c) Next c Next r End Sub Output: C: D: E: F: H: etc. 

在这里输入图像说明

你可以像引用表中的字段一样引用数组。 像表一样,数组也是从零开始的(也就是说,第一列被引用为0而不是1)。 所以,如果你的数组被称为MyArray,你会做类似于:

 Debug.Print MyArray(0) Debug.Print MyArray(1) Debug.Print MyArray(2) Debug.Print MyArray(3) 

不要忘记,你首先必须昏暗你的数组。 如果你知道它有多less列,你可以像这样明确地把它变暗:

 Dim MyArray(0 to 3) As String 

如果没有,你可以像这样开放:

 Dim MyArray() As String 

你将不得不遍历你的数组来获取来自特定行号的数据,我不认为你可以通过任何其他方式引用它。

使用分割function来分割你的条目,就像这样

 Dim episodes() As Variant ReDim episodes(numEntries - 1) As Variant For i = 0 to numEntries - 1 episodes(i) = Split(paths(i), "/") Next i Debug.Print episodes(1)(1) ' = Series1 Debug.Print episodes(1)(2) ' = Season2 

之后,确保重复应该像循环数组中的每个项目一样简单。


或者,如果您只是希望为整个path查找重复项,只需创build一个集合对象,然后将该项作为关键字加载到集合中。 如果项目已经被加载,集合将会抛出一个错误。

 On Error Goto Catch Dim episodes as Collection Set episodes = New Collection For i = 0 to numEntries - 1 episodes.add paths(i), paths(i) Next i Exit Sub Catch: 'duplicate found