VBA EXCEL 2016 - Cancellare la prima (o seconda, o terza...) parola di un testo

Anonimo
2019-07-30T16:11:57+00:00

Salve,

lo script che segue, sostituisce o elimina una qualsiasi parola o testo in uno specifico Range.

Sub sostituzione()

Range("B3:B1000").Select

Selection.Replace What:="libro AA1", Replacement:="libro MM11", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

Range("B3").Select

End Sub

Se volessi, invece, sostituire (o eliminare) una parola, indicata come la 1', o la 2'. o...., del testo, in uno specifico Range, si dovrebbe utilizzare la funzione IF THEN, oppure basta modificare lo script sopra?

Ad esempio:

 nel *Range("B3:B1000")*ho il seguente testo "interno libro xxx interno x" (le 'x' indicano numeri diversi). Come si vede, nel testo ci sono due '*interno'.*Io vorrei eliminare solo il primo 'interno' (1' parola del testo) e non la 4' parola.

Come posso fare?

Carlo - VR

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
2019-08-01T17:38:43+00:00

Ciao Carlo,

Tutto OK, Norman.

Perbacco! Mi hai salvato da una situazione molto complessa.

Pensa che, senza lo script, avrei dovuto cancellare parole a mano, per circa 9000 celle.

Data la mia esperienza ancora da neofita, non sarei riuscito a 'comporre' uno script così. Per cui ti ringrazio molto.

Sto scaricando alcune guide di VBA da Youtube e credo che da Settembre ritornerò da 'alunno' per studiare un po'.

I concetti basilari della programmazione li ho acquisiti, devo solo studiare il linguaggio specifico.

Sei stato gentilissimo anche per la pazienza dimostrata.

Bene, mi fa piacere che il problema sia stato risolto.

Per chiudere questo thread, ti chiedere gentilmente di contrassegnare la mia risposta come Risposta.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

14 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-07-31T11:32:38+00:00

    Buongiorno Carlo.

    Vediamo di capire quello che stai cercando di fare.

    In pratica, vorresti creare una VBA grazie alla quale sostituire o eliminare una parola all'interno di un range specifico, esatto?

    Ebbene, per domande come queste, che esulano un po' dallo scopo di questa Community, è possibile rivolgersi presso MSDN, il nostro forum gemello. Ad accoglierti, troverai non solo i nostri colleghi, ma anche professionisti ed esperti programmatori che sapranno consigliarti su come intervenire per risolvere questioni relative alla VBA.

    Nel frattempo, fammi sapere se hai altre domande sui nostri prodotti, alle quali la Community sarà lieta di risponderti.

    Buona giornata

    Luana

    Ciao Luana e grazie per la risposta.

    Ti confesso che altre volte ho cercato di formulare domante a MSDN, ma purtroppo non ho ricevuto risposte, per cui le formulo in questo forum perché qualcuno, cortesemente, mi ha sempre risposto.

    Io sono ancora un neofita in VBA (ho 74 anni...ma con tanta buona volontà).

    Sto ri-organizzando il mio archivio musicale e alcuni percorsi di VBA non mi riescono ancora (...li devo acquisire).

    Comunque ho formulato la domanda al forum di MSDN. Incrociamo le dita!

    PS. (per essere più chiaro)

    <<<vorresti creare una VBA grazie alla quale sostituire o eliminare una parola all'interno di un range specifico.

    Si, eliminare o sostituire. Ma non una qualsiasi parola, ma la 1', o la 2', o la 3'... (come spiegato nell'esempio che ho fatto)

    In un modulo di codice standard, prova qualcosa del genere:

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Dim arrIn As Variant

        Dim sStr As String

        Dim LRow As Long

        Dim i As Long, j As Long, k As Long

        Const sFoglio As String = "Foglio1"       '<<=== Modifica

        Const sColonna As String = "A:A"           '<<=== Modifica

        Const sParola As String = "Interno"        '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        With SH

            LRow = LastRow(SH, .Columns(sColonna))

            Set Rng = .Range("A1:A" & LRow)

        End With

        arrIn = Rng.Value

        For i = 1 To UBound(arrIn)

            Do

                sStr = arrIn(i, 1)

                j = InStr(1, sStr, sParola, vbTextCompare)

                k = InStrRev(sStr, sParola, -1, vbTextCompare)

                If k > j Then

                    sStr = Replace(sStr, sParola, vbNullString, 1, 1, vbTextCompare)

                    arrIn(i, 1) = sStr

                End If

            Loop Until j = k

        Next i

        Rng.Value = arrIn

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1, _

                            Optional sPassword As String)

        Dim bProtected As Boolean

        With SH

            If Rng Is Nothing Then

                Set Rng = .Cells

            End If

            bProtected = .ProtectContents = True

            If bProtected Then

                .Unprotect Password:=sPassword

            End If

        End With

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

        If bProtected Then

            SH.Protect Password:=sPassword, _

                       UserInterfaceOnly:=True

        End If

    End Function

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2019-07-31T11:23:06+00:00

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-07-31T10:59:00+00:00

    Buongiorno Carlo.

    Vediamo di capire quello che stai cercando di fare.

    In pratica, vorresti creare una VBA grazie alla quale sostituire o eliminare una parola all'interno di un range specifico, esatto?

    Ebbene, per domande come queste, che esulano un po' dallo scopo di questa Community, è possibile rivolgersi presso MSDN, il nostro forum gemello. Ad accoglierti, troverai non solo i nostri colleghi, ma anche professionisti ed esperti programmatori che sapranno consigliarti su come intervenire per risolvere questioni relative alla VBA.

    Nel frattempo, fammi sapere se hai altre domande sui nostri prodotti, alle quali la Community sarà lieta di risponderti.

    Buona giornata

    Luana

    Ciao Luana e grazie per la risposta.

    Ti confesso che altre volte ho cercato di formulare domante a MSDN, ma purtroppo non ho ricevuto risposte, per cui le formulo in questo forum perché qualcuno, cortesemente, mi ha sempre risposto.

    Io sono ancora un neofita in VBA (ho 74 anni...ma con tanta buona volontà).

    Sto ri-organizzando il mio archivio musicale e alcuni percorsi di VBA non mi riescono ancora (...li devo acquisire).

    Comunque ho formulato la domanda al forum di MSDN. Incrociamo le dita!

    PS. (per essere più chiaro)

    <<<vorresti creare una VBA grazie alla quale sostituire o eliminare una parola all'interno di un range specifico.

    Si, eliminare o sostituire. Ma non una qualsiasi parola, ma la 1', o la 2', o la 3'... (come spiegato nell'esempio che ho fatto)

    Ciao, scusami e grazie ancora

    Carlo - Verona

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-07-31T07:35:05+00:00

    Buongiorno Carlo.

    Vediamo di capire quello che stai cercando di fare.

    In pratica, vorresti creare una VBA grazie alla quale sostituire o eliminare una parola all'interno di un range specifico, esatto?

    Ebbene, per domande come queste, che esulano un po' dallo scopo di questa Community, è possibile rivolgersi presso MSDN, il nostro forum gemello. Ad accoglierti, troverai non solo i nostri colleghi, ma anche professionisti ed esperti programmatori che sapranno consigliarti su come intervenire per risolvere questioni relative alla VBA.

    Nel frattempo, fammi sapere se hai altre domande sui nostri prodotti, alle quali la Community sarà lieta di risponderti.

    Buona giornata

    Luana

    La risposta è stata utile?

    0 commenti Nessun commento