Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Print dictionary to sheet

Tags:

excel

vba

I have the below code that prints the dictionary to the watch window but how can I get this exact same format printed to a sheet?

    Dim key As Variant
    For Each key In dict
    Set group = dict(key)
    With group
    Debug.Print .name, .rate, .volume
    End With
    Next key
Name1 Rate1 Volume1
Name2 Rate2 Volume2
Name3 Rate3 Volume3
like image 439
34653120 Avatar asked Nov 02 '25 12:11

34653120


2 Answers

One option is to create an array and then dumpy the array to the sheet:

Dim arr As Variant
ReDim arr(1 To dict.Count, 1 To 3)

Dim i As Long
For i = LBound(dict.Items) To UBound(dict.Items)
    arr(i + 1, 1) = dict.Items(i).name
    arr(i + 1, 2) = dict.Items(i).rate
    arr(i + 1, 3) = dict.Items(i).volume
Next

' Write out to sheet
Sheet1.Range("A1").Resize(Ubound(arr, 1), Ubound(arr, 2)).Value = arr
like image 58
BigBen Avatar answered Nov 04 '25 00:11

BigBen


List Properties of Objects Located in a Dictionary

Option Explicit

Sub YourCode()

    Const dFirstCellAddress As String = "A1"

    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim dict As Object ' just to compile
    
    '...
    
    Dim rCount As Long: rCount = dict.Count
    If rCount = 0 Then Exit Sub
    Dim cCount As Long: cCount = 3
    
    Dim Data() As Variant: Data = GetDictGroupsProperties(dict)
     
    ws.Range(dFirstCellAddress).Resize(rCount, cCount).Value = Data

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose:      Returns the 'Name', 'Rate' and 'Volume' properties
'               of the objects, contained in the 'items' of a dictionary,
'               in the rows of a 2D one-based three-column array.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetDictGroupsProperties(ByVal dict As Object) As Variant()

    Dim Data As Variant: ReDim Data(1 To dict.Count, 1 To 3)
    
    Dim cKey As Variant
    Dim r As Long
    
    For Each cKey In dict.Keys
        r = r + 1
        With dict(cKey)
            Data(r, 1) = .Name
            Data(r, 2) = .Rate
            Data(r, 3) = .Volume
        End With
    Next cKey
    
    GetDictGroupsProperties = Data
    
End Function
like image 37
VBasic2008 Avatar answered Nov 04 '25 01:11

VBasic2008



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!