Ciao, ti conviene usare l'oggetto Scripting.Dictionary
ti posto un esempio per i vari punti che hai elencato..

codice:
Dim carte As New Scripting.Dictionary

Private Type tipoCarta
   tSeme As String
   tDescrizione As String
End Type

'distingui il seme delle carte in:
'C=cuori; Q=quadri; F=fiori; P=picche;
'e siccome il seme deve essere univoco come chiave per l'oggetto dictionay
'passare il valore del seme così:
'C1 (asso di cuori), Q10 (10 di quadri), FK (re di fiori) ecc...
'come descrizione si può mettere quello che si vuole.. magari il nome esteso della carta..
Private Sub InserisciCarta(seme As String, descrizione As String)
   If Not carte.Exists(seme) Then
      carte.Add seme, descrizione
   End If
End Sub

Private Sub CancellaCarta(ByVal seme As String)
   carte.Remove seme
End Sub

Private Function ContaCarte() As Integer
   ContaCarte = carte.Count
End Function

Private Function DescrizioneCarta(ByVal seme As String) As String
   DescrizioneCarta = carte.Item(seme)
End Function

Private Function EstraiCarta() As tipoCarta
   Dim vettCarte
   Dim carta As Integer
   Randomize
   carta = Int(ContaCarte * Rnd)   ' Genera un valore casuale compreso tra 0 e il numero di carte meno 1.
   vettCarte = carte.Keys
   EstraiCarta.tSeme = vettCarte(carta)
   EstraiCarta.tDescrizione = DescrizioneCarta(vettCarte(carta))
   CancellaCarta (vettCarte(carta))
End Function


'esempio di applicazione

Private Sub Command1_Click()
   Dim prova As tipoCarta
   MsgBox "totale carte=" & ContaCarte
   prova = EstraiCarta
   MsgBox prova.tSeme & "  " & prova.tDescrizione   
End Sub

Private Sub Form_Load()
   Dim i As Integer
   For i = 1 To 10
      InserisciCarta "C" & i, "CARTA DI CUORI " & i
   Next
   InserisciCarta "CJ","CARTA DI CUORI J"
   InserisciCarta "CQ","CARTA DI CUORI Q"
   InserisciCarta "CK","CARTA DI CUORI K"
End Sub
Per usare l'oggetto Scripting.Dictionary, devi inserire il riferimento, al tuo progetto, della libreria "Microsoft Scripting Runtime"