Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

codificare i caratteri del testo di una cella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

codificare i caratteri del testo di una cella

Postdi teto021162 » 05/12/19 17:47

salve a tutti.

mi serve un codice vba che mi permetta di cambiare ( tradurre ) ogni carattere contenuto in una cella, che uso come contenitore di sigle
mi spiego meglio.
Vorrei che nella cella ogni volta che c'è

p venga cambiata con piega
t venga cambiata con taglio
c venga cambiata con colore
pr venga cambiata con permanente
cs venga cambiata con contrasti ecc...

In modo da soddisfare tutti gli incroci tra loro tipo:

p = piega
p t = piega taglio
p c = piega colore
p t c = piega taglio colore
p pr = piega permanente ecc...

Grazie a tutti

teto
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Sponsor
 

Re: codificare i caratteri del testo di una cella

Postdi Anthony47 » 06/12/19 01:44

Facciamo cosi':
a) in un foglio a piacere (io ho usato Foglio1) inserisci una tabella in cui la prima colonna e' la sigla e la seconda la sua traduzione. La sigla puo' essere lunga a piacere e non deve contenere "Spazio"; la traduzione e' un testo libero
b) assegna a questo intervallo il nome "Traduz" (tieniti pure un tot di celle di riserva per aggiungere in futuro altre coppie di voci)

Poi nel "Modulo di Classe" del foglio su cui devi lavorare (vedi viewtopic.php?f=26&t=103893&p=647675#p647675) inserisci questa macro di WorksheetChange:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myArea As String, ScartoDest As Long, mCell As Range, I As Long
Dim mySplit, myMatch, nwTxt As String, TxtDelim As String, mDelim As String
'
myArea = "A2:A10"       '<<< L'area del foglio in cui possono essere inserite le sigle da tradurre
ScartoDest = 3          '<<< Le colonne di scarto in cui saranno inserite le "traduzioni" (0=stessa colonna)
TxtDelim = " "          '<<< Il carattere che sara' usato per separare le "traduzioni"
mDelim = " "            '<<< Il carattere che separa le Sigle
'
For Each mCell In Target
    If Not Application.Intersect(Target, Range(myArea)) Is Nothing Then
        Application.EnableEvents = False
        nwTxt = ""
        mySplit = Split(mCell.Value & mDelim, mDelim, , vbTextCompare)
        For I = 0 To UBound(mySplit)
            myMatch = Application.Match(mySplit(I), Application.WorksheetFunction.Index(Sheets("Foglio1").Range("Traduz"), 0, 1), False)
            If Not IsError(myMatch) Then
                nwTxt = nwTxt & Sheets("Foglio1").Range("Traduz").Cells(myMatch, 2).Value & TxtDelim
            ElseIf Len(mySplit(I)) > 0 Then
                nwTxt = nwTxt & mySplit(I) & TxtDelim
            End If
        Next I
        If Len(nwTxt) > 0 Then
            mCell.Offset(0, ScartoDest).Value = Left(nwTxt, Len(nwTxt) - Len(TxtDelim))
        Else
            mCell.Offset(0, ScartoDest).Value = nwTxt
        End If
    End If
Next mCell
Application.EnableEvents = True
End Sub
Le righe marcate <<< sono da personalizzare come da commento, spero sia chiaro.
Ci sono 2 righe che contengono Sheets("Foglio1").Range("Traduz"); qui devi modificare per scrivere il nome del foglio su cui hai posizionato l'intervallo "Traduz"

Nel caso che una "sigla" non sia presente nella tabella delle Traduzioni essa sara' riportata senza traduzione

Prova e fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 16680
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 06/12/19 12:19

Grazie Anthony,

per quanto riguarda la creazione della tabella in excel 2003 non so dove trovarla e come farla.
In dati c'è un sotto menù tabella ma non ne vuole sapere di crearla.

Comunque già ora pur non usando il sistema tabella ho ideato un metodo che da una sigla la trasforma in una o più parole compresi gli spazi, è un po maccheronico ma è già impostato e funziona.

Il post verteva sulla possibilità di convertire in una parola un carattere o più coppie di caratteri separati da uno spazio contenuti nella cella .

Nella mia idea una volta stabilito il criterio di conversione del singolo carattere o coppia di caratteri si poteva avere tutte le combinazioni possibili in automatico.

e quindi avere p = piega ma anche p t pr = piega taglio permanente oppure p pr cs = piega permanente contrasti ecc.

In rete mi sono imbattuto nel comando Replace ma non riesco a capire come usarlo ti lascio il link

http://mikevba.altervista.org/macro/mikevba028.htm
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Anthony47 » 06/12/19 23:55

Se vuoi usare la funzione Replace allora la descrizione di mamma Microsoft e' sempre (per me) la piu' chiara: https://docs.microsoft.com/it-it/office ... e-function

Quanto alla "tabella", devi creare un elenco su due colonne: la colonna XXX (intendo una colonna a piacere) contiene la "sigla", di lunghezza qualsiasi che non comprenda lo "spazio"; la colonna accanto a destra, sulla stessa riga, contiene la "traduzione" per quella sigla.
Poi a questo elenco (che prudenzialmente allunghi per altre 10-15 righe per inserirci tutte le siglke che vorrai in futuro) assegni il nome "Traduz"

Questo e' quello che la macro richiede.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16680
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 07/12/19 15:45

Grazie ma il contenuto della pagina di microsoft che parla di replace è solo in inglese, non ci capisco nulla.

Potresti darmi delle dritte tu per favore.

Grazie :(
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Anthony47 » 09/12/19 13:03

Se tu hai Office 2003 allora hai certamente l'help on line del vba: da un modulo vba, "punti" col mouse una parolachiave del tuo codice (es. Replace) e premi F1.

In linea di massima:
Replace(IlTestoDiPartenza, TestoDaCercare, TestoDaUsareInSostituzione, [ Inizio, [ Contatore, [ tipoDiConfronto ]]])

I primi tre parametri sono ovvii; gli altri sono opzionali:
-Inizio indica il carattere da cui parte IlTestoDiPartenza; se omesso equivale a 1
-Contatore indica quante sostituzioni verranno fatte; se omesso equivale a "tutte"
-tipoDiConfronto, indica il tipo di confronto; per le stringhe io uso vbTextCompare e mi trovo bene

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16680
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 09/12/19 16:46

mi dispiace ma senza un esempio di codice vba non riesco a capire come fare
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Anthony47 » 10/12/19 01:47

Ad esempio:
Codice: Seleziona tutto
Sub unozzz()
Dim myTxt As String, nwTxt As String
'
myTxt = "Uno Due Uno Due tre uno tre due"
nwTxt = Replace(myTxt, "uno", "#", 1, 2, vbTextCompare)   'oppure vbBinaryCompare
Debug.Print nwTxt
'
End Sub


Poi prova a "giocare" con i 3 parametri opzionali e guarda nella "Finestra Immediata" il risultato

Ma intanto perche' non risolvi con la "tabella", come ti avevo detto?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16680
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 10/12/19 16:03

ho fatto alcune prove legando il codice al contenuto di cella a1
Codice: Seleziona tutto
Sub unozzz()
Dim myTxt As String, nwTxt As String
'
'myTxt = "Uno Due Uno Due tre uno tre due"

myTxt = Range("a1")
nwTxt = Replace(myTxt, "p", "piega", vbTextCompare)   'oppure vbBinaryCompare

'myTxt = Range("a1")
'nwTxt = Replace(myTxt, "t", "taglio", vbTextCompare)   'oppure vbBinaryCompare

Debug.Print nwTxt
'
End Sub
assomiglia a quello che cerco ma come fare se in a1 c'è p t oppure p t pr ecc
Io vorrei poter tradurre le lettere di abbreviazione con parole e se le parole sono più di una inserire anche lo spazio.
tipo:
P = piega
t = Taglio
pr = permanente

insieme nella cella a1p t pr = piega taglio permanente

Una volta battezzate le traduzioni potrei gestire tutte le casistiche di incrocio.

In una tabella tutti gli incroci del listino abbreviato ( e sono una trentina di voci ) li devo prevedere a monte invece io vorrei che lo facesse il codice
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Ricky0185 » 10/12/19 21:04

Ma scusa, con una macro di If....Then, Elseif.....Then puoi avere le mutazioni che vuoi ad ogni lancio, tipo
Codice: Seleziona tutto
Sub Sost()
    Dim Cell As Range
    For Each Cell In Range("A1:J20") 'da mettere l'area interessata
    If Cell.Value = "p cr r" Then 'le abbreviazioni da personalizzare...mettine 3-4 distribuite nell'area interessata
    Cell.Value = "prova croce re"
    ElseIf Cell.Value = "p cr" Then
    Cell.Value = "prova croce"
    ElseIf Cell.Value = "p" Then
    Cell.Value = "prova"
    'e puoi continuare con tutte le casistiche
    End If
    Next Cell
    Range("A1:J20").Select 'sempre l'area interessata
    Selection.Columns.AutoFit
End Sub

Anthony potrebbe poi anche ottimizzare il tutto con un Select Case, io non sono capace.
Ciao
Ricky0185
Utente Junior
 
Post: 10
Iscritto il: 10/12/19 20:38

Re: codificare i caratteri del testo di una cella

Postdi Anthony47 » 10/12/19 21:17

Benvenuto Ricky e grazie per il tuo intervento.

Io ritengo che sia una cattiva idea mettere nel codice le sigle e la loro conversione; per questo ho sviluppato la soluzione basata sulla tabella di conversione piu' la Sub Worksheet_Change (mia prima risposta).

E sinceramente non ho capito cosa non va in quella proposta...
Avatar utente
Anthony47
Moderatore
 
Post: 16680
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 10/12/19 22:40

Grazie Ricky,
ma questo codice, pur funzionando bene, mi obbliga a prevedere tutti gli incroci tra le voci del mio listino ed è facile saltare qualche abbinamento.
Vorrei un codice che traduca le singole lettere o copie di lettere contenute nella cella a1.
La cella di riferimento è la a1 e contiene testo copia incollato di lettere o coppie di lettere.
Quindi questa è la traduzione
P = pipa
T = toro
C = cena
C S= caso strano
PR = pesca rossa
LS = lato sinistro
R = rana
ecc...

di conseguenza voglio ottenere in cella b1 la traduzione di quello che contiene la cella a1.

tipo:

a1 = p
b1 = pipa

a1 = p pr
b1 = pipa pesca rossa

La traduzione deve essere delle singole lettere e/o coppie di lettere

infatti nel secondo esempio il codice trova la singola lettera P e la traduce in pipa poi trova la copia di lettere PR e la traduce in pesca rossa quindi il risultato è ( P PR ) pipa pesca rossa

Teto :)
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Ricky0185 » 10/12/19 23:22

Sarà meglio che ti spieghi, cioè è sempre e solo nella cella A1 che compaiono le lettere da convertire o anche altrove.
È sempre e solo nella cella B1 che compare il risultato della conversione o anche altrove.
Nei primi casi basterebbe anche solo una formula nella B1 con SE nidificato, anche se ad Anthony non sconquinfera mettere in chiaro sigle e conversioni.
Aspettiamo chiarimenti o, meglio, un file con dati di partenza e risultato da ottenere.
Ciao
Ricky0185
Utente Junior
 
Post: 10
Iscritto il: 10/12/19 20:38

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 10/12/19 23:41

Si confermo Ricky le celle sono sempre quelle indicate la cella A1 e la B1 e non altre
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Ricky0185 » 11/12/19 00:26

In A1 quello che ci hai detto ed in B1
Codice: Seleziona tutto
=SE(A1="p";"pipa";SE(A1="T";"toro";SE(A1="C";"cena";SE(A1="C S";"caso strano";SE(A1="PR";"pesca rossa";SE(A1="LS";"lato sinistro";SE(A1="R";"rana";0)))))))

Ciao
Ricky0185
Utente Junior
 
Post: 10
Iscritto il: 10/12/19 20:38

Re: codificare i caratteri del testo di una cella

Postdi Anthony47 » 11/12/19 10:29

ad Anthony non sconquinfera mettere in chiaro sigle e conversioni

Vedi, teto fa il parrucchiere per uomini (questo particolare l'ho inventato); prima o poi inserira' nel suo catalogo di prestazioni le meches: che fa, prende la formula e ci aggiunge quanto basta per codificare anche mc=meches?
E se invece di scrivere "p t c" (piega taglio colore) scrivesse "p c t"?

Io dico che e' molto meglio se sigle e relative traduzioni sono in un "dizionario" a parte (la tabella a due colonne di cui continuo a parlare), cosi' basta andare nella tabella e inserire nell'elenco una sigla e accanto la sua traduzione
Codice: Seleziona tutto
p    Piega
c    Colore
t    Taglio
etc  etc

Poi potra' scrivere c p t, c t p, t p c, C P T, o cosa gli viene in mente e la traduzione e' sempre regolare. E per fare le meches gli basta in coda alla tabella aggiungere
Codice: Seleziona tutto
mc   Meches

La proposta che feci qualche giorno fa (l'unica proposta di soluzione che ho fatto; il resto era per dare a teto, su sua richiesta, informazioni sulla funzione Replace) avrebbe potuto essere piu' semplice se fosse stato chiaro che si parlava di una sola cella con la conversione nella colonna adiacente.
Comunque con quanto pubblicai basta personalizzare (come gia' descritto)
Codice: Seleziona tutto
myArea = "A1"
ScartoDest = 1


Piu' inserire ovviamente la tabella con le sigle e le traduzioni

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 16680
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: codificare i caratteri del testo di una cella

Postdi Ricky0185 » 11/12/19 14:46

Effettivamente ciai ragione. Hai però fatto una macro da "Corso VBA-Lezione N°49" (il corso è composto da 50 lezioni e la 50esima spiega la macro per fare il caffè) mentre se il tuo parrucchiere (come me) sta scorrendo le "Premesse Lezione N°1", non è in grado di modificarla/personalizzarla. Meglio un filetto d'esempio, viste le problematiche che ha incontrato Teto. Anche se so che la pappa bisognerebbe prepararla da soli, è molto più gustosa.
Saluti
Riccardo
Ricky0185
Utente Junior
 
Post: 10
Iscritto il: 10/12/19 20:38

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 11/12/19 15:24

Ciao Ricky,
la formula non è congeniale allo scopo in quanto considera il contenuto totale e non il singolo carattere.
Infatti se in A1 digito p pr in B1 non ho come risultato pipa pesca rossa ma zero invece con solo p ho pipa e naturalmente con pr ho pesca rossa.

teto :(
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi teto021162 » 11/12/19 15:28

Ciao Anthony,

Il progetto dizionario contenuto in una tabella mi piace e credo sia l'unica strada ma non sono riuscito a costruirlo perche con excel 2003 che uso non sono riuscito a trovare il modo di impostare la tabella. Ho visto che nelle versioni superiori c'è un comando apposito ma nel 2003 :?:

Puoi indicarmi la strada?

Teto :oops:
excel 2003 windows 10
teto021162
Utente Junior
 
Post: 61
Iscritto il: 08/08/19 16:24

Re: codificare i caratteri del testo di una cella

Postdi Ricky0185 » 11/12/19 16:07

Guarda che la tabella è quella che trovi sul Foglio2 e dove devi aggiungere tutte le sigle nella colonna A SENZA SPAZI e la relativa traduzione nella B, stessa riga. In A scrivi ppr ed in B pipa pesca rossa e vedrai che sul foglio1 se in A1 scrivi ppr in B1....
Ricky0185
Utente Junior
 
Post: 10
Iscritto il: 10/12/19 20:38

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "codificare i caratteri del testo di una cella":


Chi c’è in linea

Visitano il forum: BG66 e 23 ospiti