Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

trovare un dato...con VB!

1 view
Skip to first unread message

alex...@yahoo.it

unread,
Nov 28, 2007, 6:22:27 AM11/28/07
to
ciao,

riposto questo messaggio, spero che qualcuno riesca a darmi una mano:

Ho un foglio excel dove vengono aggiornati periodicamente dei dati,
ogni riga corrisponde ad un codice univoco

Visto che le righe spesso sono parecchie, vorrei automatizzare il più
possibile questo foglio. Vorrei tramite una macro o del codice VB,
creare una finestra (o tramite una cella dedicata per la ricerca
codici), dove è possibile immettere il codice da ricercare e tramite
un pulsante, vengono visualizzate le righe (o la riga) contenenti il
codice inserito nella finestra o cella dedicata alla ricerca.

poi tramite un altro pulsante, ritornare a visualizzare tutti i codici
presenti.

So che sono presenti degli strumenti, che fanno tutto questo (vedi
filtri), però volevo "automatizzare" il foglio excel..

grazie per qualsiasi aiuto!


@lessia

Mauro Gamberini

unread,
Nov 28, 2007, 6:50:24 AM11/28/07
to
Visto che le righe spesso sono parecchie, vorrei automatizzare il più
possibile questo foglio. Vorrei tramite una macro o del codice VB,
creare una finestra (o tramite una cella dedicata per la ricerca
codici), dove è possibile immettere il codice da ricercare e tramite
un pulsante, vengono visualizzate le righe (o la riga) contenenti il
codice inserito nella finestra o cella dedicata alla ricerca.

poi tramite un altro pulsante, ritornare a visualizzare tutti i codici
presenti.

So che sono presenti degli strumenti, che fanno tutto questo (vedi
filtri), però volevo "automatizzare" il foglio excel..

grazie per qualsiasi aiuto!
*****************************************************

Lavoriamo un po' di fantasia...
La tua tabella nelle colonne A e B
I codici da filtrare in A
Avvia il registratore Macro
Seleziona A1
Dai-->Filtro-->Filtro automatico
Esegui un filtro
poi
Seleziona tutto(in pratica togli il filtro)
Stoppa il registratore.

Vai a vedere il codice.
Più o meno:

Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 28/11/2007 da Mauro Gamberini
'

'
Range("A1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="valoreSelezionato"
Selection.AutoFilter Field:=1
End Sub


Modificala così:

Public Sub mFiltra()
Range("A1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=Range("D1").Value
End Sub

Dove per me Range D1 è dove andrò a mettere il valore da filtrare

Crea una seconda macro(puoi copia/incollare questa):

Public Sub mTogliFiltro()
Range("A1").Select
Selection.AutoFilter Field:=1
End Sub

Per agganciare le due macro ai pulsanti di scelta rapida:
Strumenti-->Macro-->Macro
Seleziona la macro
Pulsante: Opzioni
Inserisci la lettera(es. a)
Ok
Ripeti per l'altra macro
(qui metterà CTRL + q)
Ok

Inserisci il valore da ricercare in D1
CTRL+a
CTRL+q

--
---------------------------
Mauro Gamberini
http://www.riolab.org/


alex...@yahoo.it

unread,
Nov 28, 2007, 7:00:15 AM11/28/07
to
Grazie Mauro, per la risposta...

una domanda, e se le colonne dove devo effettuare la ricerca sono 3?
la colonna A, la colonna E, e la colonna F.

grazie 1000

@lessia

On 28 Nov, 13:50, "Mauro Gamberini"

Mauro Gamberini

unread,
Nov 28, 2007, 9:13:47 AM11/28/07
to
una domanda, e se le colonne dove devo effettuare la ricerca sono 3?
la colonna A, la colonna E, e la colonna F.
****************************************************

Prova con queste 2 macro:

Public Sub mNascondiRighe()

Dim lngUltimaRiga As Long
Dim lngRiga As Long
Dim lngColonna As Long

With Worksheets("Foglio1")
lngUltimaRiga = .Range("A" & Rows.Count).End(xlUp).Row
For lngRiga = 2 To lngUltimaRiga
For lngColonna = 1 To 3
If .Cells(lngRiga, lngColonna).Value = .Range("F1").Value
Then
.Rows(lngRiga).EntireRow.Hidden = True
Exit For
End If
Next
Next
End With

End Sub

Public Sub mMostraRighe()

Dim lngUltimaRiga As Long

With Worksheets("Foglio1")
lngUltimaRiga = .Range("A" & Rows.Count).End(xlDown).Row
.Rows(1 & ":" & lngUltimaRiga).EntireRow.Hidden = False
End With

End Sub

La cella dove inserire il dato da cercare è F1.

alex...@yahoo.it

unread,
Nov 29, 2007, 3:22:57 AM11/29/07
to
Grazie Mauro!

ho provato il codice che mi hai suggerito.

Però quando inserisco il codice da ricercare, le righe con il codice
interessato me le nasconde, invece di visualizzarle e nascondere le
altre senza il codice.

Altra cosa, la ricerca può essere effettuata inserendo solo una parte
del codice presente in una cella?

ovvero devo ricercare il seguente codice alfanumerico: A902374

mi deve visualizzare le righe, dove in una cella è presente anche la
seguente dicitura A902374 - COLLANA.

come posso fare?

grazie infinite..


@lessia

On 28 Nov, 16:13, "Mauro Gamberini"

Mauro Gamberini

unread,
Nov 29, 2007, 3:56:22 AM11/29/07
to
Però quando inserisco il codice da ricercare, le righe con il codice
interessato me le nasconde, invece di visualizzarle e nascondere le
altre senza il codice.
*************************************************

Opsss.......


Altra cosa, la ricerca può essere effettuata inserendo solo una parte
del codice presente in una cella?

ovvero devo ricercare il seguente codice alfanumerico: A902374

mi deve visualizzare le righe, dove in una cella è presente anche la
seguente dicitura A902374 - COLLANA

*************************************************

Per ogni dato ci vorrebbe una colonna specifica.
Una per il codice ed una per la sua descrizione.
Comunque prova:


Public Sub mNascondiRighe()

Dim lngUltimaRiga As Long
Dim lngRiga As Long
Dim lngColonna As Long

Dim bln As Boolean
Dim s As String
Dim lng As Long

With Worksheets("Foglio1")
lngUltimaRiga = .Range("A" & Rows.Count).End(xlUp).Row
For lngRiga = 2 To lngUltimaRiga

bln = False


For lngColonna = 1 To 3

s = .Cells(lngRiga, lngColonna).Value
lng = InStr(1, s, " ")
If lng > 0 Then lng = lng - 1
If s = .Range("F1").Value Or _
Mid(s, 1, lng) = _
.Range("F1").Value Then
bln = True
End If
Next
If bln = False Then
.Rows(lngRiga).EntireRow.Hidden = True
End If
Next
End With

End Sub

--

alex...@yahoo.it

unread,
Nov 29, 2007, 6:57:05 AM11/29/07
to
Grazie Mauro,

però la ricerca di una parte del testo non funziona...

Se io inserisco nella cella per la ricerca A9045642

e nella colonna A in una riga è presente la dicitura A9045642
- Collana xyz - aksdasd

non mi viene visualizzata quando imposto la ricerca!

grazie

@lessia


On 29 Nov, 09:56, "Mauro Gamberini"

Mauro Gamberini

unread,
Nov 29, 2007, 8:15:24 AM11/29/07
to
> però la ricerca di una parte del testo non funziona...
>

A me funziona.
Controlla passo passo quello
che ti ho proposto.

alex...@yahoo.it

unread,
Nov 30, 2007, 6:58:05 AM11/30/07
to
Grazie per la tua disponibilità Mauro,

aoltre al codice che mi hai dato tu (che effettua la ricerca nella
colonna A) ho aggiunto e modificato il codice per effettuare la
ricerca nella colonna E:

Public Sub mNascondiRighe1()

Dim lngUltimaRiga As Long
Dim lngRiga As Long
Dim lngColonna As Long
Dim bln As Boolean
Dim s As String
Dim lng As Long

With Worksheets("Ubicazioni in RdF")
lngUltimaRiga = .Range("E" & Rows.Count).End(xlUp).Row
For lngRiga = 7 To lngUltimaRiga


bln = False
For lngColonna = 1 To 3
s = .Cells(lngRiga, lngColonna).Value
lng = InStr(1, s, " ")
If lng > 0 Then lng = lng - 1

If s = .Range("C4").Value Or _


Mid(s, 1, lng) = _

.Range("C4").Value Then


bln = True
End If
Next
If bln = False Then
.Rows(lngRiga).EntireRow.Hidden = True
End If
Next
End With

End Sub


Public Sub mMostraRighe1()

Dim lngUltimaRiga As Long

With Worksheets("Ubicazioni in RdF")
lngUltimaRiga = .Range("E" & Rows.Count).End(xlDown).Row


.Rows(1 & ":" & lngUltimaRiga).EntireRow.Hidden = False
End With

End Sub


Quando imposto la ricerca sulla cella C4, e avvio la macro... mi
nasconde tutte le righe! dove sbaglio?


grazie

@lessia


On 29 Nov, 14:15, "Mauro Gamberini"

Mauro Gamberini

unread,
Nov 30, 2007, 8:14:26 AM11/30/07
to
aoltre al codice che mi hai dato tu (che effettua la ricerca nella
colonna A) ho aggiunto e modificato il codice per effettuare la
ricerca nella colonna E:
**********************************************
<cut>

Ehmmm...., poca dimestichezza con le macro, vero?
La mia macro esegue la ricerca da A1 a Cn,
dove n è l'ultima riga trovata in A.

Se le colonne sono 5(A, B, C, D, E) modifica

For lngColonna = 1 To 3

in
For lngColonna = 1 To 5

Se(se) le tue colonne sono non contigue,
(es. Colonne A e E)cambiamo la macro.

Se(se) le colonne di ricerca sono contigue,
C4 si trova all'interno del filtro che andrai ad effettuare.
Qualcosa forse mi sfugge su come è strutturato il tuo foglio.

alex...@yahoo.it

unread,
Nov 30, 2007, 11:00:55 AM11/30/07
to
Grazie per la spiegazione Mauro, adesso funziona tutto bene. In
effetti non ho una gran dimestichezza con le macro!

@lessia

On 30 Nov, 14:14, "Mauro Gamberini"

Mauro Gamberini

unread,
Nov 30, 2007, 11:07:51 AM11/30/07
to
>adesso funziona tutto bene.
>

Bene 8-)
Buon fine settimana anche a te.

--
---------------------------
Mauro Gamberini(particolarmente gentile questo venerdě...)
http://www.riolab.org/


0 new messages