Funzione CONCATENA, rispettando le formattazioni delle celle d'origine

Anonimo
2014-01-17T14:41:39+00:00

Salve  Forum,

Dopo tanto tempo che non ci sentiamo...,  mi è subentrata  una sorta di nostalgia; ecco che, per  porvi rimedio, vi pongo un quesito:

DOMANDA: La funzione "CONCATENA"  prevede il riporto dei contenuti  così come  diversamente formattati nelle varie celle di provenienza?

Esempio:  Nella  cella A1 digitiamo: 30 con tipo di carattere Arial  11;

Nella  cella B1 digitiamo : 30 con tipo di carattere Arial  15  in grassetto.;

In C1 la Funzione: =CONCATENA( A1;B1) .

La richiesta è quella di conoscere se in C1 è possibile che venga riportata la concatenazione rispettando , però, le formattazioni originali delle celle di provenienza,  nella fattispecie in esempio, così:

3030

Un saluto, Paolo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2014-01-19T08:59:16+00:00

...

 

Però (c'è sempre un però di mezzo), ti sei dimenticato la originaria richiesta del riporto della eventuale diversa dimensione del carattere (se non ne hai più parlato vuol dire che ciò non è possibile realizzarlo, o mi sbaglio**?**

 

...

Ciao Paolo,

non mi pareva lo avessi chiesto, tant'è che all'inizio della discussione, visto che un pochino ti conosco, ti chiesi:

Un'ultima informazione.

Deve essere 'concatenato' solamente il formato grassetto o anche altre formattazioni?

Non avendo ricevuto risposta, mi sono concentrato solamente sul grassetto. Il nuovo codice, che sostituisce il precedente, 'concatena': il tipo di carattere, la dimensione, il colore, il grassetto, il corsivo e la sottolineatura.

Spero che sia sufficiente. 

Andrea.


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rTarget As Range, rSource As Range, cel As Range

Dim sFormula  As String

Dim p As Long, l As Long

  On Error GoTo Uffa

  Set rSource = Range("D8, E8, D9, E9, G9, H9, D10, E10, E11, D12, D5, E5, D6, E6, D7, E7")

  If Intersect(Target, rSource) Is Nothing Then Exit Sub

  Set rTarget = Worksheets("ORD - GDP IND KM").[b11]

  With Application

    .ScreenUpdating = False

    .EnableEvents = False

  End With

  For Each cel In rSource

    sFormula = sFormula & cel.Value

  Next

  rTarget.Value = sFormula

  p = 1

  For Each cel In rSource

    l = Len(cel.Value)

    If l Then

      With rTarget.Characters(p, l)

        .Font.Name = cel.Font.Name

        .Font.Size = cel.Font.Size

        .Font.Color = cel.Font.Color

        .Font.Bold = cel.Font.Bold

        .Font.Underline = cel.Font.Underline

        .Font.Italic = cel.Font.Italic

      End With

    End If

    p = p + l

  Next

exitSub:

  With Application

    .ScreenUpdating = True

    .EnableEvents = True

  End With

  Exit Sub

Uffa:

  Call MsgBox("Si è verificato il seguente errore: " & Err & vbNewLine & Err.Description)

  Resume exitSub

End Sub


La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2014-01-18T16:28:09+00:00

Ciao, Andy, 

Ti ringrazio preliminarmente per  avermi fornito l'indirizzo su cui studiare qualcosina  (mi sarebbe servito già ieri**!). Più che il mare, sento nell'aria l'odore del Carnevale di Acireale, luogo in cui vado tutti gli anni, perché lì si respira tutta l'aria "du Brazil".**

 

...

Ciao Paolo,

... peccato solo che manchino le Brasiliane. ;)

Complimenti, comunque, anche questa volta sei riuscito a spingerti oltre i limiti delle funzionalità di excel.

Il problema, come hai giustamente fatto notare tu, si verifica quando la lunghezza del testo risultante eccede i 255 caratteri, è dovuto ad una limitazione della funzione evaluate.

Ti allego il nuovo codice che sostituisce interamente il precedente.

Buon carnevale,

Andrea.

PS:

visto che ti stai applicando per imparare il vba, ti elargisco un primo consiglio:

la prima riga che ho anche evidenziato non è opzionale ma obbligatoriae deve essere presente all'inizio di ogni modulo. Seleziona explicit e premi F1 per informazioni in merito.


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rTarget As Range, rSource As Range, cel As Range

Dim sFormula  As String

Dim p As Long, l As Long

On Error GoTo Uffa

Set rSource = Range("D8, E8, D9, E9, G9, H9, D10, E10, E11, D12, D5, E5, D6, E6, D7, E7")

If Intersect(Target, rSource) Is Nothing Then Exit Sub

Set rTarget = Worksheets("ORD - GDP IND KM").[b11]

With Application

.ScreenUpdating = False

.EnableEvents = False

End With

For Each cel In rSource

sFormula = sFormula & cel.Value

Next

rTarget.Value = sFormula

p = 1

For Each cel In rSource

l = Len(cel.Value)

If l Then rTarget.Characters(p, l).Font.Bold = cel.Font.Bold

p = p + l

Next

exitSub:

With Application

.ScreenUpdating = True

.EnableEvents = True

End With

Exit Sub

Uffa:

Call MsgBox("Si è verificato il seguente errore: " & Err & vbNewLine & Err.Description)

Resume exitSub

End Sub


La risposta è stata utile?

0 commenti Nessun commento

44 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-01-17T17:05:18+00:00

    Andy,

     

    se ti dovesse servire, io ho posto su SkyDrive **** qui il file originale su cui dovrebbe essere applicata l'istruzione VBA (File ovviamente denudato di ogni dato).

     

    Noterai che nel Foglio "INS" le celle colorate di celeste sono quelle che non debbono essere riportate in grassetto, mentre quelle colorate di rosso sono quelle da riportare in grassetto, tutte e due nella concatenazione di cui al Foglio: ORD - GDP IND KM, così come avrai modo di vedere, visionando il file di esempio.

     

    Ovviamente, il file posto su SkyDrive è lì  solo per aiutarti  nella comprensione del problema; l'eventuale codice avrei il piacere di inserirlo io, se non altro per fare un po' di pratica.

     

    Grazie, Paolo

    Un'ultima informazione.

    Deve essere 'concatenato' solamente il formato grassetto o anche altre formattazioni?

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  3. Anonimo
    2014-01-17T16:41:56+00:00

    Andy,

    se ti dovesse servire, io ho posto su SkyDrive **** qui il file originale su cui dovrebbe essere applicata l'istruzione VBA (File ovviamente denudato di ogni dato).

    Noterai che nel Foglio "INS" le celle colorate di celeste sono quelle che non debbono essere riportate in grassetto, mentre quelle colorate di rosso sono quelle da riportare in grassetto, tutte e due nella concatenazione di cui al Foglio: ORD - GDP IND KM, così come avrai modo di vedere, visionando il file di esempio.

    Ovviamente, il file posto su SkyDrive è lì  solo per aiutarti  nella comprensione del problema; l'eventuale codice avrei il piacere di inserirlo io, se non altro per fare un po' di pratica.

    Grazie, Paolo

    La risposta è stata utile?

    0 commenti Nessun commento