La consultazione del forum è libera per tutti.
Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).
Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.
Ciao a tutti, sono un nuovo utente di Excel. Mi trovo davanti alla necessità di creare, per ogni colonna, un testo, concatenando ovvero unendo il testo contenuto in diverse celle della colonna stessa. Se solo una riga è popolata allora il risultato deve essere il testo stesso. Se invece più righe della colonna sono popolate, il risultato deve essere: "testo1: (testo2, testo3, testo4, ...). Sono riuscito ad ottenere questo risultato se non per il fatto che la formattazione in grassetto, ottenuta condizionalmente, di alcuni elementi, non viene conservata. Cosa, questa, per me,
necessaria. Quindi il risultato voluto deve essere: "testo1: (testo2, testo3, testo4, ...) dove testo3 conserva la formattazione condizionale d'origine. Ho provato a capire come usare il VBA ma ho appena iniziato ad usare Excel e, per ora, non fa per me.
Spero di aver spiegato bene la mia necessità. Allego un file d'esempio.
RISPOSTA A VECCHIA DISCUSSIONE
ciao,
esempio valido solo per la cella E55, nei riferimenti degli intervalli (es. E3:E11) l'11 va sostituito con un paramentro che si adatti al numero effettivo di righe (cosa che ho trascurato nel codice)
La prima sub va inserita nella cartella di foglio1 (gestione eventi), la sub sotto mette in grassetto i termini corretti, se modifichi quanche dato in colonna A oppure E si innesca la prima sub che gestisce l'evento change
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:A1000")) Is Nothing Or _ Not Intersect(Target, Range("E1:E11")) Is Nothing Then Application.EnableEvents = False Range("E55").Font.Bold = False Range("E55").FormulaLocal = "=SE(CONTA.VALORI(E4:E54)>1;E4&"": (""&TESTO.UNISCI("", "";1;E5:E54)&"")"";E4)" Call CheckFC End If Application.EnableEvents = True End Sub Sub CheckFC() Dim r As Integer, i As Integer, l As Integer, ini As Integer, testo, cella Range("E55").Copy Range("E55").PasteSpecial Paste:=xlPasteValues testo = Replace(Range("E55").Value, ": (", ", ") testo = Replace(testo, " ", "") testo = Split(testo, ",") For r = 3 To 11 cella = Application.Match(Cells(r, "E"), Range("A1:A1000"), 0) If Not IsError(cella) Then For i = LBound(testo) To UBound(testo) If testo(i) = Cells(r, "E") Then ini = InStr(Cells(55, "E"), testo(i)) l = Len(testo(i)) Range("E55").Characters(Start:=ini, Length:=l).Font.FontStyle = "Grassetto" Exit For End If Next i End If Next r End Sub
prego, se hai qualche difficoltà dillo pure