Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Cercare parola in frase e ricopiare colonne in altro foglio

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

Cercare parola in frase e ricopiare colonne in altro foglio

Postdi Spartacus85 » 24/07/13 17:31

Salve Ragazzi, sn ancora qui per chiederviun info su una nuova Macro.

Questa volta quello che vorrei facesse è trovare una o più parole all'interno di una frase e che una volta trovata mi ricopiasse le colonne accanto su un altro foglio.
Vi porto un esempio pratico. Vorrei cercare da un elenco A la parola "mele" e vorrei che tutte le volte che mi trova tale parola mi riporta nel foglio 2 la riga selezionata con le colonne A e B.

FOGLIO 1 FOGLIO 1
Colonna A Colonna B Colonna A Colonna B
Mele verdi 5 Mele verdi 5
Pere Rosse 7 Mele blu 1
Mele blu 1
Melone bianco 4

Piccola nota: potrei voler cercare anche piò di una parola e la frase in cui cercare può essere variabile
Qui di seguito un codice che avevo trovato in un altro topic riadattato al mio caso ma non funzionante

Codice: Seleziona tutto
Sub TrovaStrCopia()
Dim Ws1, Ws2 As Worksheet
Dim UR1, UR2 As Long
Dim RR1 As Long

Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
Ws2.Range("A:X").ClearContents
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
For RR1 = 5 To UR1
If Len(UCase(Ws1.Range("C" & RR1))) > Len(Replace(UCase(Ws1.Range("C" & RR1)), "Interface", "")) Then
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A" & RR1 & ":X" & RR1).Copy Destination:=Ws2.Range("A" & UR2)
End If
Next RR1
End Sub


Grazie per l'aiuto come sempre.
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Sponsor
 

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Flash30005 » 24/07/13 19:25

Ci deve essere qualche errore nell'esempio pratico perché non riesco a capire lo schema dati, l'input e l'otput
E' opportuna la pubblicazione di uno screenshot o l'invio del file

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Spartacus85 » 24/07/13 22:49

Hai ragione, nell'anteprima non mi dava questo errore.

Ecco qui l'esempio
Immagine
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Flash30005 » 24/07/13 23:14

Prova questa macro (è la precedente adattata)
Codice: Seleziona tutto
Sub TrovaStrCopia()
Dim Ws1, Ws2 As Worksheet
Dim UR1, UR2 As Long
Dim RR1 As Long

Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
Ws2.Range("A:X").ClearContents
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
For RR1 = 1 To UR1
If Len(UCase(Ws1.Range("A" & RR1))) > Len(Replace(UCase(Ws1.Range("A" & RR1)), "MELE", "")) Then
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A" & RR1 & ":X" & RR1).Copy Destination:=Ws2.Range("A" & UR2)
End If
Next RR1
End Sub


ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Anthony47 » 24/07/13 23:17

Vedi messaggio di Flash con macro aggiornata, sopra.

Tempo fa avevo pubblicato la funzione wComm che consentiva di verificare se due frasi avevano almeno una parola in comune; la trovi qui: viewtopic.php?t=98797#p568429

Puoi usarla sia in una formula [es =wComm(A1;B1) o anche =wComm(A1;"mela pera limone")] che in una macro es
Codice: Seleziona tutto
If wComm(Range("A1").Value, Range("B1").Value) then
'     istruzioni per quando le due stringhe hanno parole in comune
End If

Vedi se riesci a utilizzarla per il tuo progetto.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Spartacus85 » 25/07/13 17:18

Perfetto la macro funziona.

Se volessi invece cercare una parola che di volta in volta viene presa da un altro elenco?

Ho provato questa Macro ma anche qui ci sarà qualcosa di non corretto.

Pensavo di fare 2 cicli for annidati dove quello piu esterno non è altro che che il ciclo che scorre nella tabella con le varie parole o frasi da cercare

Codice: Seleziona tutto
Ws1.Range("A4:AP4").Copy Destination:=Ws2.Range("A1")
UR3 = Ws3.Range("C" & Rows.Count).End(xlUp).Row
For RR3 = 5 To UR3
UR1 = Ws1.Range("C" & Rows.Count).End(xlUp).Row
For RR1 = 5 To UR1
If Len(UCase(Ws1.Range("C" & RR1))) > Len(Replace(UCase(Ws1.Range("C" & RR1)), UCase(Ws3.Range("B" & RR3)), "")) Then
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A" & RR1 & ":AP" & RR1).Copy Destination:=Ws2.Range("A" & UR2)
End If
Next RR1
Next RR3
End Sub
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Flash30005 » 25/07/13 22:15

Se hai l'elenco dei prodotti da ricercare nel foglio3
occorre appunto un ciclo For next "esterno" rispetto a quello esistente pertanto la macro sarà così (adatta secondo il tuo schema dati)
Codice: Seleziona tutto
Sub TrovaStrCopia()
Dim Ws1, Ws2, Ws3 As Worksheet
Dim UR1, UR2, UR3 As Long
Dim RR1 As Long

Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
Set Ws3 = Worksheets("Foglio3")
Ws2.Range("A:X").ClearContents
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
UR3 = Ws3.Range("A" & Rows.Count).End(xlUp).Row
For RR3 = 2 To UR3
Prod = UCase(Ws3.Range("A" & RR3).Value)
For RR1 = 1 To UR1
If Len(UCase(Ws1.Range("A" & RR1))) > Len(Replace(UCase(Ws1.Range("A" & RR1)), Prod, "")) Then
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
Ws1.Range("A" & RR1 & ":X" & RR1).Copy Destination:=Ws2.Range("A" & UR2)
End If
Next RR1
Next RR3
End Sub


ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi scossa » 28/07/13 16:09

Flash30005 ha scritto:Se hai l'elenco dei prodotti da ricercare nel foglio3
occorre appunto un ciclo For next "esterno" rispetto a quello esistente pertanto la macro sarà così (adatta secondo il tuo schema dati)
Codice: Seleziona tutto
Sub TrovaStrCopia()
Dim Ws1, Ws2, Ws3 As Worksheet
Dim UR1, UR2, UR3 As Long
Dim RR1 As Long
....... CUT .....



Ciao Flash,

volevo solo sottolineare che, con la sintassi che hai utilizzato, solo Ws3 è dichiarata come Worksheet e solo UR3 è Long, le altre sono tutte Variant. Purtroppo in VBA è necessario dimensionare separatamente le singole variabili:
Codice: Seleziona tutto
Sub TrovaStrCopia()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet
Dim UR1 As Long, UR2 As Long, UR3 As Long
Dim RR1 As Long
....... CUT .....
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Flash30005 » 29/07/13 11:00

Infatti evito di inserirle quando non occorrono come in questo caso.
La macro è un refuso con adattamento e quindi sono state riportate ma si possono cancellare

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Spartacus85 » 29/07/13 11:29

Ho un altro priccolo problema con questa porzione di codice (in realtà é solo un proseguio del codice precedente)

Vorrei applicare un filtro ad una colonna ma non conosco il simbolo per filtrare secondo la modalità " non contiene".
Ho provato con "<>*"&Variabile come ho trovato su diversi forum ma non funziona.

Ho provato anche la versione sotto ma nulla.
Il codice sotto funziona solo se scrivo esattametne la frase da filtrare e non una sua porziona, credo che l'errore sia nella simbologia utilizzata per definire non contiene.

Codice: Seleziona tutto
Variabile = (InputBox("Variabile name"))

        Ws2.Range("$A$1:$AP$136").AutoFilter _
        Field:=11, _
        Criteria1:="<>" & Variabile, Operator:=xlAnd
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Flash30005 » 29/07/13 12:01

A me sembra che funzioni tutto se adotti questo codice
Codice: Seleziona tutto
Variab = "gggg"
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="<>*" & Variab & "*", Operator:=xlAnd


Sostituisci la variab ("gggg") con quello che vuoi

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Cercare parola in frase e ricopiare colonne in altro fog

Postdi Spartacus85 » 30/07/13 17:03

Confermo funziona.

Grazie mille per la soffiata :)
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30


Torna a Applicazioni Office Windows


Topic correlati a "Cercare parola in frase e ricopiare colonne in altro foglio":


Chi c’è in linea

Visitano il forum: albval, Zer0Kelvin e 22 ospiti