Script VBA di Excel 2013 necessario per [chiuso]


-1

Ho diverse celle che hanno una stringa di testo in parte in grassetto e in parte NotBold. Devo eliminare la parte in grassetto del testo nelle celle

Esempio:

ExcelImage

lname1, fname1 email1@email.com

lname2, fname2 email2@email.com

lname3, fname3 email3@email.com

Vorrei cancellare il grassetto "lname, fname" e mantenere l'indirizzo e-mail nella cella.


2
Si noti che Super User non è un servizio di scrittura di script. Se ci dici che cosa hai provato finora (compresi eventuali script che stai utilizzando) e dove sei bloccato, allora possiamo provare ad aiutare con problemi specifici. Dovresti anche leggere Come faccio una buona domanda? .
— DavidPostill

Ho provato a trovare e sostituire e troverà il testo in grassetto ma quando premo Sostituisci, sostituisce l'intera cella incluso il testo non in grassetto. Non conosco alcuna funzione in Excel in grado di formattare o modificare il testo parziale in una singola cella. Poi di nuovo, sono solo il migliore intermedio con Excel.
— Rob808,

Quindi suppongo che la mia domanda sia "Come posso eliminare la parte in grassetto della stringa di testo in ogni cella"? Prima: lname1, fname1email1@email.com Dopo: email1@email.com
— Rob808,

È possibile verificare se il testo è in grassetto con Range("A1").Characters(i, 1).Font.FontStyle = "Bold"fonte: stackoverflow.com/questions/16209572/...
— Divin3

Risposte:


3

Prima:

inserisci qui la descrizione dell'immagine

Il codice:

Sub BoldKiller()
    Dim L As Long, r As Range, t As String, i As Long

    For Each r In Intersect(ActiveSheet.UsedRange, Selection)
        t = r.Text
        If t <> "" Then
            L = Len(t)
            For i = L To 1 Step -1
                If r.Characters(i, 1).Font.Bold = True Then
                    r.Characters(i, 1).Delete
                End If
            Next i
        End If
    Next r
End Sub

e dopo:

inserisci qui la descrizione dell'immagine

EDIT # 1:

Questa macro estrae i caratteri in grassetto e li posiziona nella colonna adiacente:

Sub BoldKiller2()
    Dim L As Long, r As Range, t As String, i As Long
    Dim rr As Range

    For Each r In Intersect(ActiveSheet.UsedRange, Selection)
        t = r.Text
        If t <> "" Then
            Set rr = r.Offset(0, 1)
            rr.Font.Bold = True
            L = Len(t)
            For i = L To 1 Step -1
                If r.Characters(i, 1).Font.Bold = True Then
                    rr.Value = r.Characters(i, 1).Text & rr.Value
                    r.Characters(i, 1).Delete
                End If
            Next i
        End If
    Next r
End Sub

Prima:

inserisci qui la descrizione dell'immagine

e dopo:

inserisci qui la descrizione dell'immagine


BaryKiller, studente di Gary, tornerà molto utile. Spero che tu possa darmi un'altra soluzione. Stessi dati dall'alto ma questa volta possiamo dividere il grassetto e posizionarlo nella colonna adiacente? Quindi, avremmo lname, fname in una colonna e l'indirizzo e-mail nella colonna net.
— Rob808,

1
@ Rob808 Domani darò un'occhiata.
— Gary's Student,

Grazie mille. Aspetto tue notizie.
— Rob808,

1
@ Rob808 Vedi il mio EDIT n. 1:
— Gary's Student,

EDIT # 1 funziona perfettamente. Grazie mille.
— Rob808,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.