Syed Noshahi

42
reputation
3
Function AddDataToArray(vArray() As Variant, Optional sFieldAndValue As String) As Variant()

'sFieldAndValue = FieldName,FieldValue
'OR
'sFieldAndValue = FieldName1,FieldName2,FieldName3...

Dim arrS() As String, s As String
Dim tempArr()
Dim j As Long, k As Long, i As Long
Dim OD1 As Object: Set OD1 = CreateObject("Scripting.Dictionary"): OD1.CompareMode = 1
Dim bCombineCols As Boolean

arrS() = Split(sFieldAndValue, ",", , 1)
vArray() = RefactorArray(vArray(), , arrS(0))
lastCol = UBound(vArray, 2)

If UBound(arrS) > 1 Then
    bCombineCols = True
Else
    bCombineCols = False
End If

If Not bCombineCols Then
    For i = 2 To UBound(vArray)
        vArray(i, lastCol) = arrS(1)
    Next
Else
    For i = 1 To UBound(arrS)
        If Not IsNumeric(arrS(i)) Then
            s = s & arrS(i) & ","
        Else
            s = s & vArray(i, arrS(i)) & ","
        End If
    Next
    s = Left(s, Len(s) - 1)
    tempArr() = RefactorArray(vArray(), s)
    lastColTemp = UBound(tempArr, 2)
    
    For i = 2 To UBound(tempArr)
        For j = 1 To lastColTemp
            vArray(i, lastCol) = vArray(i, lastCol) & tempArr(i, j)
        Next
    Next
End If

AddDataToArray = vArray()

End Function

Function RenameColumnsInArray(vArray() As Variant, sColumnsToChange)

'ColumnName|NewColumnName,ColumnName2|NewColumnName2

Dim OD1 As Object: Set OD1 = CreateObject("Scripting.Dictionary"): OD1.CompareMode = 1
Dim arrS() As String
Dim arrS2() As String

For i = 1 To UBound(vArray, 2)
    OD1("col" & "colschanging" & vArray(1, i)) = i
    OD1("col" & "colschanging" & i) = vArray(1, i)
Next


arrS() = Split(sColumnsToChange, ",", , 1)

For i = LBound(arrS) To UBound(arrS)
    arrS2() = Split(arrS(i), "|", , 1)
    xCol = OD1("col" & "colschanging" & arrS2(0))
    If Not IsEmpty(xCol) Then
        vArray(1, xCol) = arrS2(1)
    Else
        Debug.Print "Column " & arrS2(0) & " not found."
    End If
Next

RenameColumnsInArray = vArray()


End Function

Function arrSplitTwoDimension(sInputString, Optional sDeliminater As String = ",") As Variant()

Dim arrS() As String

arrS() = Split(sInputString, sDeliminater, , 1)

If UBound(arrS) <> -1 Then
    ReDim arr(1, UBound(arrS) + 1)
    
    For i = 1 To UBound(arr, 2)
        arr(1, i) = arrS(i - 1)
    Next
    
    arrSplitTwoDimension = arr()
End If

End Function