2015-01-07 2 views
0

У меня есть следующий код:Streamline/размер размера массива в массиве массивов

Function SplitMe(sourceArray As Variant) As Variant 
Dim source As Variant, tempArr As Variant 
source = sourceArray 

If Not IsArray(source) Then _ 
    Exit Function 

Dim r As Integer 
Dim parts() As String 
Dim splitted As Variant 
ReDim splitted(LBound(source) To UBound(source)) 

For r = LBound(source) To UBound(source) 
    parts = VBA.Split(source(r, 1), "\") 
    splitted(r) = parts 
Next r 

Это не работает хорошо, пока здесь:

splitted = Application.Transpose(splitted) 
SplitMe = splitted 

For r = LBound(splitted) To UBound(splitted) 
    Debug.Print uniqueValues(splitted, r) 
Next r 
End Function 

В этом пункте я хочу, чтобы транспонировать массив. Он отлично работает, если массивы в разбитом массиве имеют одинаковый размер. Проблема возникает, когда у меня есть запрос, как это:

Array of Array before transposing

транспонирование необходимо для функции uniqueValues(splitted, r).

Теперь я хочу написать функцию, которая идет вперед, и добавляет длину запросам, которые не являются максимальным размером.
В этом случае splitted(1) предоставит длину 0 to 9, а затем остальные 5 узлов должны быть увеличены до 0 to 9.

Любой, у кого есть функция под рукой, которая делает это?

+0

Почему бы не попробовать писать это? Вам нужно будет дважды пропустить «split»: на первом проходе найдите максимальный размер каждого подматрица, а на втором проходе используйте «Redim Preserve» для изменения размера по мере необходимости. –

+0

Да, я сейчас в процессе написания. Я не нашел решение в Интернете и подумал, что, возможно, у кого-то есть. Как только я закончу, я отвечу на вопрос рабочим кодом. – Spurious

ответ

0

Следующая функция изменяет массив массива в тех же размерах:

Function oneDimensionArray(tmpArr As Variant, maxDim As Long) As Variant 
Dim r As Long, redimArray As Variant 
For r = LBound(tmpArr) To UBound(tmpArr) 
    redimArray = tmpArr(r) 
    If maxDim > UBound(redimArray) Then ReDim Preserve redimArray(LBound(redimArray) To maxDim) 
    tmpArr(r) = redimArray 
Next r 

oneDimensionArray = tmpArr 
End Function 
Смежные вопросы