PDA

View Full Version : [V.B.] Macro Excel per trova e scrivi in cella


k4daoal
14-01-2010, 09:40
Ciao a tutti,
avrei bisogno di una macro che cerchi una data parola all'interno di una cella (o più celle), se trovata scriva in un altra cella un valore da me specificato.

Esempio:

La cella A:1 contiene:
"Scarpe rosse lucide"
La cella A:2 contiene:
"Scarpe blu lucide"
La cella A:3 contiene:
"Scarpe nere pelle"
La cella A:4 contiene:
"Maglione Rosso"
La cella A:5 contiene:
"Maglione Verde"
La cella A:6 contiene:
"Scarpe blu pelle"

CONDIZIONE A:
Cerca nella colonna A:9999 le parole "scarpe" e "pelle" se trovate scrivi nella cella affianco il valore 10

CONDIZIONE B:
Cerca nella colonna A:9999 le parole "maglione" se trovate scrivi nella cella affianco il valore 20

Quindi nella cella B:3 e B:6 ci dovrà essere il valore 10
Quindi nella cella B:4 e B:5 ci dovrà essere il valore 20

Grazie a tutti
Daniele

zuper
14-01-2010, 11:09
ti serve per forza una macro?
se basta una funzione:

=SE(VAL.ERR(TROVA("aglione";A1))=FALSO;20;SE(VAL.ERR(TROVA("carpe";A1))=FALSO;SE(VAL.ERR(TROVA("pelle";A1))=FALSO;10;0);0))

ho messo "aglione" e "carpe" perchè la funzione TROVA è case sensitive...

MarcoGG
14-01-2010, 12:23
La cella A:1 contiene:
"Scarpe rosse lucide"
La cella A:2 contiene:
"Scarpe blu lucide"
La cella A:3 contiene:
"Scarpe nere pelle"
La cella A:4 contiene:
"Maglione Rosso"
La cella A:5 contiene:
"Maglione Verde"
La cella A:6 contiene:
"Scarpe blu pelle"

CONDIZIONE A:
Cerca nella colonna A:9999 le parole "scarpe" e "pelle" se trovate scrivi nella cella affianco il valore 10

CONDIZIONE B:
Cerca nella colonna A:9999 le parole "maglione" se trovate scrivi nella cella affianco il valore 20

Quindi nella cella B:3 e B:6 ci dovrà essere il valore 10
Quindi nella cella B:4 e B:5 ci dovrà essere il valore 20


Dim i As Long
Dim txtCella As String
Application.ScreenUpdating = False
For i = 1 To 9999
txtCella = Sheets("nomeFoglio").Range("A" & i).Text
If InStr(1, txtCella, "maglione", vbTextCompare) > 0 Then Sheets("nomeFoglio").Range("B" & i).FormulaR1C1 = "20"
If InStr(1, txtCella, "scarpe", vbTextCompare) > 0 And InStr(1, txtCella, "pelle", vbTextCompare) > 0 Then Sheets("nomeFoglio").Range("B" & i).FormulaR1C1 = "10"
Next i
Application.ScreenUpdating = True

Dal momento che non è previsto che le stesse keywords coesistano nella stessa cella ( ad es. non è previsto un "maglione + scarpe" ) le condizioni possono essere accodate semplicemente, senza che una escluda l'altra.
Inoltre il parametro vbTextCompare assicura che la condizione di matching sia case-insensitive. ;)

Infine una considerazione : personalmente non mi sembra una scelta brillante mettere tutto in una colonna sola. Meglio sarebbe stato prevedere una tabella dati con :

TipoProdotto | Materiale | Colore

quindi :

Scarpe | Lucido | Rosso
Scarpe | Pelle | Nero
...
Maglione | [null] | Verde
...
ecc... ;)

k4daoal
15-01-2010, 10:57
grazie mille a entrambi :) funziona in entrambi i modi :)

Daniele

k4daoal
20-01-2010, 10:04
Ciao,

scusate di nuovo, una domanda rapida.

Ho una variabile numerica di nome "max".

Voglio far selezionare la cella con cordinate A:max, però ovviamente se scrivo Range("Amax").Select mi dà errore....come posso fare?

Grazie mille
Daniele

MarcoGG
20-01-2010, 11:46
Voglio far selezionare la cella con cordinate A:max, però ovviamente se scrivo Range("Amax").Select mi dà errore....come posso fare?


Per forza... :
Range("A" & max).Select

zuper
20-01-2010, 11:47
Range("a" & max).Select

edit....BATTUTO per un soffio :)

MarcoGG
20-01-2010, 11:52
Range("a" & max).Select

edit....BATTUTO per un soffio :)

:p

zuper
20-01-2010, 12:00
:p

beh cmq arrivare anche solo un secondo dopo di te è già un onore :)

MarcoGG
20-01-2010, 12:35
beh cmq arrivare anche solo un secondo dopo di te è già un onore :)

Grazie. Lusingato. ;)