Concatena con VBA Excel 2003
Hai un problema con Excel? 
Concatena con VBA (Excel 2003)
di TheProphet (utente non iscritto) data: 29/12/2012 02:03:44
Ho creato questa funzione per poter concatenare in una cella tutti i valori del range con stesso font di colore.
Funziona, ma ho due domande da fare:
-Perchè inserisce lo spazio prima della prima parola (ogni cella contiene una parola)?? e come toglierlo??
-Si può andare a capo tra una parola e l'altra modificando la mia funzione?? o bisogna per forza cambiare il formato della cella su Excel??
Grazie in anticipo per l'aiuto!!!
Function CCC(SCells As Range, WhatColorIndex As Integer)
Application.Volatile
For Each Cella In SCells
If Cella.Cells.Value <> "" Then
If Cella.Font.ColorIndex = WhatColorIndex Then CCC = CCC & " " & Cella
End If
Next Cella
End Function |
di Vecchio Frac data: 29/12/2012 09:50:03
1) perchè CCC alla prima esecuzione del ciclo è vuoto e tu gli aggiungi comunque uno spazio. Usa Trim() al termine;
2) usa un LineFeed per andare a capo e allora non serve lo spazio;
e aggiungo:
3) perchè usi ColorIndex? usando solo Color puoi specificare le costanti vb: vbBlack, vbRed, vbYellow ecc.
4) un nome più esplicito di CCC sarebbe meglio :)
5) ho modificato la firma della tua funzione per fargli accettare un parametro "a_capo", se lo imposti su True il risultato sarà una concatenazione di stringhe separate da line feed altrimenti la separazione avviene mediante spazio vuoto.
Option Explicit
Function CCC(SCells As Range, WhatColorIndex As Integer, a_capo As Boolean)
Dim s As String, cella As Range
For Each cella In [SCells]
If cella <> "" And cella.Font.ColorIndex = WhatColorIndex Then s = s & IIf(a_capo, vbLf, " ") & cella
Next cella
CCC = Trim(s)
End Function
|
di TheProphet (utente non iscritto) data: 29/12/2012 16:22:54
Ho provato la tua funzione ma nella cella mi dava #VALORE!.
Dopo un bel po di tentativi ho risolto tutto con la funzione sottostante. Magari come struttura non è delle migliori ma ho iniziato a usare vb da un paio di settimane.
Nella nuova funzione:
-Ho creato una variabile 'a' per il problema del primo ciclo, che mi lasciava la prima riga vuota;
-Ho creato una variabile 'b' di appoggio per CCC;
-Uso il ColorIndex solo perchè non conoscevo le costanti vb
Grazie mille dell'aiuto!!
Function CCC(SCells As Range, WhatColorIndex As Integer) As String
Application.Volatile
a = "PRIMA"
For Each cella In SCells
If cella.Cells.Value <> "" Then
If (cella.Font.ColorIndex = WhatColorIndex) Then
If (a = "PRIMA") Then
b = b & cella
a = "DOPO"
Else
b = b & vbLf & cella
End If
End If
End If
Next cella
CCC = Trim(b)
End Function |
di Vecchio Frac data: 29/12/2012 21:17:03
Ho capito dal tuo ultimo post che volevi utilizzare questa function dal foglio di lavoro, ma è impossibile ottenere il ritorno a capo in cella. L'utilizzo era per essere richiamato da altro codice, non come UDF.
La versione seguente è leggermente migliore ma devi utilizzarla da VBA in questo modo:
Sia in A1:A10 l'elenco di parole alcune delle quali in rosso.
Con questa istruzione:
Range("C1") = CCC([A1:A10], 3)
ottieni in cella C1 l'elenco delle parole rosse ciascuna a capo nella cella C1.
Altro modo non saprei.
Option Explicit
Function CCC(SCells As Range, WhatColorIndex As Integer)
Dim s As String, cella As Range
s = ""
For Each cella In SCells
If cella <> "" And cella.Font.ColorIndex = WhatColorIndex Then s = cella & vbLf & s
Next cella
s = Left(s, Len(s) - 1)
CCC = Trim(s)
End Function
|
Vuoi Approfondire?