I am supporting CandidateX

CandidateX is a startup that focuses on creating inclusion-focused hiring solutions, designed to increase access to job opportunities for underestimated talent. Check them out if you have a few minutes to spare. They need visibility!

Here’s something I do in many pieces of code on this site. Let’s say that you have a list of things, lets say an array or a collection and you want to create a list of unique values. The .add() method of cJobject very handily only creates a child for new values.

Private Sub cjList()
    ' use cjobject to get a unique list
    Dim a As Variant, cj As New cJobject, j As cJobject, i As Long
    a = Array("a", "b", "c", "c", "d", "d", "e", "a")
    With cj.init(Nothing)
        For i = LBound(a) To UBound(a)
            .add CStr(a(i))
        Next i
    End With
    For Each j In cj.children
        Debug.Print j.key
    Next j
End Sub

That means that the above code, very usefully produces a list of unique values in the given array – a,b,c,d,e
Organizing into families

Even, better, cJobject can organize things into families.

Private Sub cjListFamily()
    ' use cjobject to get a unique list
    Dim a As Variant, cj As New cJobject, j As cJobject, i As Long, jj As cJobject
    a = Array("smith.john", "smith.mary", "jones.fred", "jones.tom", "white.chalky", "smith.tom")
    With cj.init(Nothing)
        For i = LBound(a) To UBound(a)
            .add CStr(a(i))
        Next i
        Debug.Print .formatData
    End With
End Sub

gives us

1.smith

1.smith.john

1.smith.mary

1.smith.tom

1.jones

1.jones.fred

1.jones.tom

1.white

1.white.chalky

See How to use cJobject for more on this useful object.

Take a look at One Liners for more tips like this.

In the meantime why not join our forum, follow the blog or follow me on Twitter to ensure you get updates when they are available. You can download this example in the cDataSet.xlsm from Downloads