Ho scritto una funzione personalizzata per concatenare un intervallo, utilizzando un concatenatore personalizzato.
Public Function mikeConcat(rng As Range, concatenator As Variant) As String
if left(selection.value,1)="'" then goto end1
toReturn = "'"
For Each cel In rng
toReturn = toReturn & cel & CStr(concatenator)
Next cel
mikeConcat = Left(toReturn, Len(toReturn) - 1)
end1: End Function
Funziona benissimo, ma sembra che le celle in cui lo uso lo chiamino costantemente. Senza disabilitare l'aggiornamento della formula del foglio di lavoro, come posso assicurarmi che venga chiamato una sola volta per cella?
Edit1: domanda per riflettere il cambiamento raccomandato da FreeMan. Modifica2: viene visualizzato un errore di riferimento circolare e non funziona.
Worksheet.Calculate
, sia chiamato nel codice VBA che Excel stesso, ricalcolerà tutte le formule delle celle, inclusi gli UDF. Ciò significa che la tua funzione verrà chiamata. Periodo. È possibile collegarlo mettendo un carattere ASCII non stampabile alla fine della post-concenuazione, quindi verificare l'esistenza di quel carattere prima di iniziare la concatenazione.