I don't know what you mean snb. I did +16k tests. Randomize can be added but some will argue about that too.

For the routine in #6, it still needs some work to skip 0 entries.

Here is another routine. It too can have multiple duplicate numbers and 0(s).
Sub Test_geRandom()  
  Dim a, i As Integer
  
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Application.EnableEvents = False
  
  ActiveSheet.UsedRange.ClearContents
  For i = 1 To 5  'Columns.Count
    a = kRandom(100, 20, False)
    With Range(Cells(1, i), Cells(20, i))
      .Value = WorksheetFunction.Transpose(a)
    End With
  Next i
  
  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
  Application.EnableEvents = True
End Sub


'Similar to, Gary Evans, https://stackoverflow.com/questions/37835877/generate-n-random-numbers-summed-upto-100-vba
Function geRandom(aSum As Long, xItems As Long)
  Dim AryNumbers()    As Long
  Dim LngCounter      As Long
  'ReDim AryNumbers(0)
  ReDim AryNumbers(0 To xItems - 1)


  Randomize


  Do Until LngCounter = aSum
    AryNumbers(UBound(AryNumbers, 1)) = Int(xItems * Rnd + 1)
    If (LngCounter + AryNumbers(UBound(AryNumbers, 1))) > aSum Then
      AryNumbers(UBound(AryNumbers, 1)) = aSum - LngCounter
      Else
        LngCounter = LngCounter + AryNumbers(UBound(AryNumbers, 1))
        'ReDim Preserve AryNumbers(UBound(AryNumbers, 1) + 1)
    End If
  Loop
  geRandom = AryNumbers
End Function