For the first part try this.
Private Sub UserForm_Initialize()
Dim I As Long

    'Macro Purpose: To populate a multi-column listbox with data from
    '               a worksheet range
    
    Dim lbtarget As msforms.ListBox
    Dim rngSource As Range
    
    'Set reference to the range of data to be filled
    With Worksheets("Waiting list")
        Set rngSource = Worksheets("Waiting list").Range("A2:E" & .Range("A" & Rows.Count).End(xlUp).Row)
    End With

   'Fll the listbox
    Set lbtarget = Me.ListBox1

    With lbtarget
        'Determine number of columns
        .ColumnCount = 5
        'Set column widths
        .ColumnWidths = "100;20;50;50;20"
        'Insert the range of data supplied
        .List = rngSource.Cells.Value
        For I = 0 To .ListCount - 1
            .List(I, 4) = Trim(rngSource.Cells(I + 1, 5).Text)
        Next I
    End With
    
End Sub
Not sure about the second part, what do you want to base the column widths on?