Ricerca stringhe in una matrice
Hai un problema con Excel? 
Ricerca stringhe in una matrice
di valexandro (utente non iscritto) data: 11/08/2014 17:32:10
Gentilissimi utenti del forum, mi chiamo Alessandro e sto lavorando da giorni ad una piccola macro per gestire un magazzino stampi, ma non so come effettuare una manovra. L'idea è questa: nella colonna 1 ho elencato i nomi delle caselle dell'armadio in cui andare a sistemare gli stampi (A1;A2;A3;A4;A5;B1;B2...) Dalla cella b2 (che non ha nulla a che vedere con il B2 scritto prima perché è semplicemente il nome di una posizione dell'armadio) fino alla cella K41 ci sono tutti i nomi degli stampi. Dal momento che di uno stesso stampo ne posso avere più di uno (ad esempio lo stampo chiamato PK12345 posso averlo in 3 posizioni diverse) come faccio a far fare una ricerca alla macro in modo tale che mi restituisca TUTTE le posizioni in cui questo stampo è stato trovato? Io riesco a fargli fare la ricerca ma al primo che trova si ferma.
Allego il codice che ho abbozzato fino ad ora (e che è tutto da finire)
Dal momento che sono alle prime armi con VBA, chiedo il vostro preziosissimo aiuto per cercare di muovermi da questo punto morto.
Ringrazio tutti voi in anticipo per la vostra diponibilità
P.S: di sotto ho allegato quello che ho cercato di spiegare a parole
CASELLA CODICI STAMPI
A1
A2
A3
A4 PK10800
A5
B1 PK10800
B2
B3
B4
B5
C1
C2
C3
C4
C5
D1
D2
D3
D4
D5
E1
E2
E3
E4
E5
F1
F2
F3
F4
F5
G1
G2
G3
G4
G5
H1
H2
H3
H4
H5
Option Compare Text 'con questa maniera le parole in maiuscolo e minuscolo sono uguali, ad esempio PK10800 è uguale a pk10800
Sub MAGAZZINO()
Dim i, j As Integer
Dim codice As String
codice = Cells(2, 15)
SCANSIONE:
codice = InputBox("scansiona stampo")
codice = UCase(codice) 'questa istruzione serve a fare in modo che il codice scansionato, che compare nel messaggio, sia sempre in maiuscolo
For i = 2 To 41
For j = 2 To 11
If Cells(i, j) = codice Then
MsgBox "il" & " " & codice & " " & "si trova nella casella" & " " & Cells(i, 1).Value
GoTo SELEZIONE
End If
Next j
Next i
domanda = MsgBox("il" & " " & codice & " " & "NON È NELLO SCAFFALE, VUOI EFFETTUARE UN'ALTRA RICERCA?", vbYesNo)
If domanda = vbYes Then
GoTo SCANSIONE
Else
End If
SELEZIONE:
domanda = MsgBox("VUOI PRELEVARE LO STAMPO?", vbYesNo)
If domanda = vbYes Then
Cells(i, j).ClearContents
Else
End If
End Sub
|
di lepat (utente non iscritto) data: 11/08/2014 18:02:54
allegai il file
di lepat (utente non iscritto) data: 11/08/2014 18:43:24
non importa allegare, prova questo codice, ovviamente occorrerà indicare da dove verrà prelevato lo stampo in caso di più stampi
Option Compare Text 'con questa maniera le parole in maiuscolo e minuscolo sono uguali, ad esempio PK10800 è uguale a pk10800
Sub MAGAZZINO()
Dim i, j As Integer
Dim codice As String
codice = Cells(2, 15)
SCANSIONE:
codice = InputBox("scansiona stampo")
codice = UCase(codice) 'questa istruzione serve a fare in modo che il codice scansionato, che compare nel messaggio, sia sempre in maiuscolo
For i = 2 To 41
'For j = 2 To 11
If Cells(i, 2) = codice Then s = s & Cells(i, 1) & ", "
Next
MsgBox "il" & " " & codice & " " & "si trova nella caselle : " & s
If s = "" Then
domanda = MsgBox("il" & " " & codice & " " & "NON È NELLO SCAFFALE, VUOI EFFETTUARE UN'ALTRA RICERCA?", vbYesNo)
If domanda = vbYes Then
GoTo SCANSIONE
Else
Exit Sub
End If
Else
SELEZIONE:
domanda = MsgBox("VUOI PRELEVARE LO STAMPO?", vbYesNo)
If domanda = vbYes Then
' Cells(i, j).ClearContents ??????????
End If
End If
End Sub
|
Ricerca stringhe in una matrice
di valexandro (utente non iscritto) data: 11/08/2014 21:21:50
ciao Lepat,
prima di tutto grazie per l'interessamento, ho provato a far girare il codice ma non vedo nessun cambiamento nel senso che mi trova esattamente la posizione di uno stampo (a meno che non abbia fatto qualcosa di strano), ma non degli altri. Adesso proverò a studiare un po'più a fondo le istruzioni "for each...next".
di lepat (utente non iscritto) data: 11/08/2014 21:59:50
a me funziona bene, a questo punto è necessario allegare il file
Vuoi Approfondire?