Ricerca stringhe in una matrice



  • 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