2012-12-19 17 views
9

Ho dati nelle celle A1: A1000. Si tratta di una lista di nomi seguiti da una piccola nota, in questo modo:elimina i dati nella cella dopo il carattere specifico

  • sam "fast
  • nick" lungo
  • tom" quick

Tutti hanno " e uno spazio dopo i nomi e poi la nota.Quello che sto cercando di fare è cancellare il tutto dopo il nome

Stavo giocando con i macro per provare a farlo, ma non riuscivo a far funzionare nulla. Potrei farlo?

risposta

23

Ecco un trucco ingegnoso, senza macro:

Selezionare l'intervallo corretto (o anche solo fare clic su A per selezionare l'intera colonna) e poi fare Ctrl+F, fare clic su Replace, in Find scrivere esattamente "* e lasciare il Replace with scatola vuota. Ora fai clic su Replace all e tada!

Sostituisce tutto ciò che segue (e include) la citazione con niente perché utilizza * come jolly che ha lasciato vuota la casella di sostituzione.

Edit: Come suggerito qui è il codice VBA per questo:

Columns("A:A").Replace What:="""*", Replacement:="", LookAt:=xlPart 
+1

+1 per facile e veloce, senza passare da 'Testo a colonne' ... potrebbe essere utile mostrare OP come scrivere il metodo '.Replace' in VBA nel caso in cui ne abbia bisogno come parte di un programma più grande. –

+2

Ottima risposta. Fai sempre un backup dei tuoi dati. –

1
Sub Macro1() 
    For Row = 1 To 1000 
     S = Range("A" & Row).Cells.Value 
     Pos = InStr(S, Chr(34)) 
     If Pos > 0 Then Range("A" & Row).Cells.Value = Left(S, Pos - 1) 
    Next 
End Sub 
+0

davvero? perché tutto quel loop quando 'Find' e' Replace' funzionano così facilmente in questa situazione? –

+1

Scott, sono d'accordo sul fatto che gli altri approcci sono più veloci e più facili. (Non conoscevo i caratteri jolly in Trova che Alexandre ha pubblicato, quello è nella mia cassetta degli attrezzi mentale.) L'OP parlava di macro, quindi l'ho fatto con i macro. Potrebbe essere utile a loro se si imbattono in qualcosa di più complicato che non riescono a trovare un'espressione regolare per. – Ernie

5

facile! Non so quale versione di Excel si sta utilizzando, ma in breve si vuole fare un Convert Text to Columns e quindi dividere le celle utilizzando un delimitatore di ". Questo ti lascerà con due colonne, uno dei dati che vuoi e uno che puoi semplicemente cancellare.

Ecco la passeggiata attraverso in Office 2010:

  1. colonna di evidenziare un
  2. trovare il menu Data
  3. trovare il menu Convert Text to Columns
  4. Scegli Delimited e ha colpito next
  5. Nel Other casella, digitare "
  6. hit Finish

Fatto! Ora hai tutti i nomi nella colonna A e puoi semplicemente eliminare la colonna B.

Per riassumere, fai un "Converti testo in colonne" e quindi dividi le celle usando un delimitatore di ". Super facile e veloce.

+1

inoltre, quando si arriva alla sezione che mostra i dati da importare, selezionare la seconda colonna e cambiarla in "Non importare la colonna (salta)", e non si deve preoccupare di eliminare la colonna B – SeanC

4

poche opzioni:

Riposizionare

Range("A1:A1000").Replace """*", vbNullString 

Se avete bisogno di manipolare il valore scegliete il seguito sono più appropriato:

Con Regex:

Dim str As String, strClean As String 
Dim cell As Range 

For Each cell In Range("A1:A1000") 

    With CreateObject("vbscript.regexp") 
     .Pattern = "\""(.*)" 
     .Global = True 
     cell = .Replace(cell, vbNullString) 
    End With 

Next cell 

Senza Regex, dividendo la stringa:

Dim strSplit() As String 
Dim cell As Range 

For Each cell In Range("A1:A1000") 

    If (cell.Value <> vbNullString) Then 

     cell.Value = Split(cell.Value, """")(0) 

    End If 

Next cell 
+1

? perché tutto quel looping e invocazione di 'RegEx' quando' Find' e 'Replace' funzionano così facilmente in questa situazione? –

+0

aggiunto Sostituisci come un'altra opzione, più efficiente in questa situazione a meno che l'utente non debba fare qualcosa con ogni valore dopo l'elaborazione. – InContext

2

Nel caso in cui si desidera mantenere i dati di origine, è anche possibile farlo con una semplice formula di Excel nella colonna successiva. Supponendo che i dati sono nella colonna A, la seguente formula restituisce solo il nome: =LEFT(A1,SEARCH("""",A1)-1)

0

Press ctrl + f, cliccare su replace tab, tipo * nella casella find what e cliccare su replace all. Non è necessario inserire nulla nella casella replace. Qui sostituisci tutto dopo lo ..

Problemi correlati