Ma se sapete che Excel consente, tramite il comando Testo-in-colonna, di separare i dati in orizzontale, perche' vi fate strutture dati che invece vanno in verticale?
Cio' detto,
- Codice: Seleziona tutto
Function UT2Cippa(ByVal myStr As String, Optional mySep As String = ",") As Variant
'Quando non basta Text to Column
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109038
'Sintassi:
' UT2Cippa(StringaDiPartenza [Separatore])
' Restituisce un array verticale od orizzontale secondo la posizione della formula
'
Dim aOut(), mySplit, pCC As Long, vOr As Boolean
Dim oArr()
'
If Len(Replace(myStr, " ", "", , , vbTextCompare)) < 1 Then UT2Cippa = "???": Exit Function
If Parent.Caller.Rows.Count > 1 Then
pCC = Parent.Caller.Rows.Count
vOr = True
Else
pCC = Parent.Caller.Columns.Count
End If
If (Len(myStr) - Len(Replace(myStr, mySep, "", , , vbTextCompare))) < pCC Then
myStr = myStr & String(pCC - Len(myStr) - 1 + Len(Replace(myStr, ",", "", , , vbTextCompare)), mySep)
End If
mySplit = Split(Replace(myStr, " ", "", , , vbTextCompare), mySep, , vbTextCompare)
If (UBound(mySplit) + 1) > pCC Then
mySplit(pCC - 1) = "... (" & (UBound(mySplit) + 1) - pCC & ")"
End If
If vOr Then
UT2Cippa = Application.WorksheetFunction.Transpose(mySplit)
Else
UT2Cippa = mySplit
End If
End Function
Va inserita in un Modulo standard del vba e poi usata in una formula matriciale:
-selezionare le celle in cui si vuole scrivere il risultato
-scivere la formula nella barra della formula
-confermare con Contr-Maiusc-Enter
Se le voci da restituire sono superiori alle celle in cui la formula e' stata inserita, allora l'ultimo item sara' sostituito dalla dizione "...(N° di Celle Mancanti). In questo caso:
-selezionare l'area che gia' contiene la formula
-allungare /allargare l'area almeno del numero di celle mancanti
-premere F2 (edit formula) e confermare con Contr-Maiusc-Enter
Se le celle in cui e' stata inserita la formula sono piu' degli item in cui la stringa e' stata frazionata allora le ultime celle saranno vuote
Il separatore di default e' la "virgola", ma puo' essere opzionalmente inserita nel richiamo della funzione.
La formula puo' essere inserita sia in orizzontale che in verticale.
Con l'esempio fornito, allora bisogna inserire in B1:Bx la formula
- Codice: Seleziona tutto
=UT2Cippa(A1)
Sarebbe analogamente accettabile la formula
=UT2Cippa(A1;",")Ovviamente ha senso dichiarare il separatore se questo deve essere diverso dalla "virgola"
Ciao