2013-08-23 26 views
11

Sto tentando di eliminare il contenuto di stringhe fino a una determinata parola contenuta all'interno della stringa. Per esempioExcel VBA - elimina il contenuto della stringa fino a * word *

"Emily has wild flowers. They are red and blue." 

mi piacerebbe utilizzare VBA per sostituire quello con

"They are red and blue." 

vale a dire rimuovere tutti i contenuti fino alla parola "Loro". Non conosco il contenuto della stringa e il numero di caratteri in esso contenuti.

Non sono sicuro di come farlo e apprezzerei davvero il vostro aiuto!

+4

Guardate Non so perché la gente sarebbe assegnare un voto negativo per questo; Non ho letteralmente idea di come programmare questo e ho davvero bisogno di aiuto. Perché è male se non riesco a produrre alcun codice per questo come qualcuno che è abbastanza nuovo per VBA? È un po 'ingiusto nei confronti di persone che non hanno tanta esperienza quanto la maggior parte degli utenti qui. – jcv

+7

Hai avuto alcune risposte e ne hai accettato uno, forse potrei dire che ci sono molti blog (pieni di confusione e con consigli sospetti) a tua disposizione. IMO SO è migliore di chiunque altro a causa di linee guida come "Le domande che richiedono il codice devono dimostrare una comprensione minima del problema da risolvere. Includi soluzioni tentate, perché non hanno funzionato e i risultati attesi. Siete i benvenuti qui, ma rompete le convenzioni> aspettatevi delle sanzioni e questo è a vostro vantaggio (così come per gli altri). – pnuts

+0

@jcv Sono stato bannato dal fare domande perché le persone hanno downvoted senza dare una ragione o una risposta ... Conosco il tuo dolore – Babar

risposta

12

Qui si va:

Dim s As String 
s = "Emily has wild flowers. They are red and blue." 

Dim indexOfThey As Integer 

indexOfThey = InStr(1, s, "They") 


Dim finalString As String 
finalString = Right(s, Len(s) - indexOfThey + 1) 
+0

Grazie per la risposta rapida, che risolve il problema! – jcv

+3

nota che non è necessario calcolare la lunghezza della stringa. 'finalString = Mid (s, indexOfThey)', come con Mid, la lunghezza è opzionale – SeanC

+2

Ciò consentirà anche di catturare le parole parziali. Se stavi cercando "go" in "I'll take the algorithm to go.", Finirai con "gorithm to go". – Aharpe

3

semplice esempio di far cadere tutto il testo prima del valore nella stringa.

Sub Foo() 
    Dim strOrig As String 
    Dim strReplace As String 
    strOrig = "The Quick brown fox jumped over the lazy dogs" 
    strReplace = "jumped" 

    MsgBox (DropTextBefore(strOrig, strReplace)) 

End Sub 

Public Function DropTextBefore(strOrigin As String, strFind As String) 
    Dim strOut As String 
    Dim intFindPosition As Integer 
    'case insensitive search 
    'could made it so that case sensitivity is a parameter but this gets the idea across. 
    If strOrigin <> "" And strFind <> "" Then 
     intFindPosition = InStr(UCase(strOrigin), UCase(strFind)) 
     strOut = Right(strOrigin, Len(strOrigin) - (intFindPosition + Len(strFind) - 1)) 
    Else 
     strOut = "Error Empty Parameter in function call was encountered." 
    End If 
    DropTextBefore = strOut 
End Function 
0

Se la parola è fissa, come "Loro" nell'esempio di cui sopra, si può semplicemente fare

  1. CTRL + H (Sostituire)
  2. * Loro (la tua parola con una stella)

nella casella Trova. La stella * è un carattere jolly che può essere chiamato come - di qualsiasi cosa prima o dopo (se aggiunta alla fine) la parola.

Cautela: fare attenzione quando si hanno parole doppie nella stessa cella.

+0

Grazie, ma l'applicazione di cui ho bisogno è più complessa e richiede l'uso di VBA. – jcv

+0

Perché è downvoted ... dov'era scritto nella domanda che questo è un complesso e reburied guidato da VBA stratergy .... – Vasim

+0

Ho intenzione di indovinare che "Mi piacerebbe usare VBA" così come il I tag 'vba' e' excel-vba' indicano VBA, oltre al fatto che il tuo approccio è pericoloso, e non affronta il fatto che il testo prima della parola "Loro" potrebbe cambiare. Manca il punto della domanda e non risponde in modo sicuro. – LittleBobbyTables

1

Questo ha funzionato grande per me:

Sub remove_until() 

Dim i, lrowA, remChar As Long 
Dim mString As String 

lrowA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 

For i = 1 To lrowA 

mString = Cells(i, 1).Value 


    If InStr(mString, "They") > 0 Then 

    remChar = Len(mString) - InStr(mString, "They") + 1 

    Cells(i, 2).Value = Left(mString, Len(mString) - remChar) 

    End If 


Next 

End Sub