ricerca libera excel



  • ricerca libera excel
    di NIK (utente non iscritto) data: 01/03/2016 09:31:32

    Buongiorno a tutti.
    Immagino sia una banalità, ma non conosco il codice VBA.
    Avrei però bisogno di potere effettuare una ricerca libera su un foglio excel per riga e colonna.
    In particolare, vorrei ricercare una cella di una matrice di numeri in base al riferimento di riga e di colonna.
    In riga ho delle date ed in colonna dei numeri o testo.

    Grazie



  • di patel data: 01/03/2016 10:26:40

    prova questa
     
    sub cerca
    riga = inputbox("riga")
    col = inputbox("colonna")
    cells(riga,col).select
    end sub





  • Dubbio interpretazione
    di NIK (utente non iscritto) data: 01/03/2016 11:09:45

    Grazie per la celerità della risposta, ma forse mi sono spiegato male, quindi ti chiedo anticipatamente scusa.
    Io avrei bisogno di cercare una cella in base ad un valore di riga e ad un valore di colonna.
    Nello specifico, ho una matrice di numeri, con nella colonna A le date (da 01/01/2016 a 31/12/2016) e nella riga 5 dei codici alfanumerici.
    Ad esempio, vorrei cercare la cella che fa riferimento alla data 22/02/2016 ed al codice diu riga '001.


    Grazie mille ... e scusate per il disguido



  • di alfrimpa data: 01/03/2016 11:19:23

    Ciao NIK ed un saluto a Patel.

    Penso che sarebbe tutto più chiaro se allegassi un file di esempio con il risultato desiderato.

    Alfredo




  • file allegato
    di NIK (utente non iscritto) data: 01/03/2016 11:25:44

    Ho allegato il file



  • di alfrimpa data: 01/03/2016 11:51:57

    Ciao Nik

    Non so se ho capito il tuo problema.

    Tu vorresti una funzione che restituisca il valore presente cella cella che fa da intersezione alla data del 21/3/2015 ed al codice 010 ossia la cella P22?

    Se è così potrebbe bastare la formula che vedi sotto inserendo in E44 010 e in E47 21/3/2015.

    Alfredo
     
    =CERCA.VERT(E47;tabella;CONFRONTA(E44;G1:Z1)+6;FALSO)





  • Chiarimenti
    di NIK (utente non iscritto) data: 01/03/2016 13:37:59

    No.
    Cerco di spiegarmi.
    La matrice così impostata ha nella colonna 1A i giorni dell'anno 2016 e nella prima riga dei campi alfanumerici; in particolare, quelli che interessano a me sono quelli numerici .... 001 002 003 ...., che corrispondono a numeri di commesse di lavoro.
    Quello che devo fare è inserire per ogni giorno le ore lavorate in una determinata commessa o in più commesse.
    Quindi, mi servirebbe una macro in basde alla quale inserisco data e n° commessa (001 002 003 ...) e quindi vado ad inserire le ore lavorate.

    Grazie



  • di alfrimpa data: 01/03/2016 13:52:45

    Quindi se ho capito bene, sempre con riferimento al tuo esempio, se devi inserire 12 ore lavorate per la commessa 010 il numero 12 va inserito nella cella P22?

    Cerca di spiegare meglio, magari con un esempio concreto e passo passo, che cosa intendi con questa frase:

    "mi servirebbe una macro in bade alla quale inserisco data e n° commessa (001 002 003 ...) e quindi vado ad inserire le ore lavorate."

    Alfredo




  • Chiarimento
    di NIK (utente non iscritto) data: 01/03/2016 14:11:19

    Ok.
    Chiarimenti in riferimento al foglio excel allegato.
    1) Il 01/03/2016 ho lavorato 8 ore alla commessa 010. Quindi, devo cercare la cella P2 ed inserire 8 ore.
    2) Il 21/03/2016 ho lavorato 4 ore alla commessa 011. Quindi, devo cercare la cella Q22 ed inserire 4 ore. Ma ho lavorato anche 4 ore alla commessa 012. Quindi, devo cercare la cella R22 ed inserire 4 ore

    Mi serve questa macro perchè ho molte commesse e così sarebbe molto più semplice.



  • di alfrimpa data: 01/03/2016 15:50:22

    Scusa Nik una domanda.

    Tu dici di avere molte commesse da inserire; con quale modalità deve avvenire questo inserimento? Con una userform ad esempio?

    Alfredo




  • Risposta modalità inserimento
    di NIK (utente non iscritto) data: 01/03/2016 16:28:39

    In pratica quel foglio excel deve contenere nella colonna A1 i giorni dell'anno e nella prima riga tutte le commesse di lavoro della società. Il motivo per il quale sono molte è che non ci lavoro solo io.
    Ma il file deve essere identico per tutti gli utenti, quindi deve contenere tutte le commesse.
    Quindi, per evitare di scorrere tutte le commesse per trovare quella in cui lavoro e poi andare a filtrare sulla data, mi sarebbe comodo questa macro che, inserendo la data ed il codice commessa nella quale sto lavorando, mi evidenzia la cella dove devo imputare le ore; a proposito, sarebbe utile che la macro, come ultima query, mi chiedesse proprio il numero di ore e lo inserisse in quella cella.

    Grazie ancora



  • di alfrimpa data: 02/03/2016 11:57:35

    Ciao Nik e perdona il ritardo della risposta ma ho "penato" un po' prima di arrivare ad un risultato che spero sia quello che desideri (ti ho allegato il file Nik1.xlsm)

    Devo fare una premessa: perché il tutto funzioni devi fare le seguentioperazioni.

    1) Inserisci a sinistra della colonna A un nuova colonna
    2) Nella nuova colonna A in A2 scrivi la formula =TESTO(B2;"gg/mm/aaaa")
    3) Copia e incolla la formula sino all'ultima cella piena della colonna A
    4) Seleziona tutti i dati della colonna A e fai un Copia, Incolla Speciale, Valori sullo stesso posto.

    A questo punto lancia la macro SelezionaCella

    Ti apparirà prima una InputBox in cui inserirai la data e poi una seconda per inserire la commessa; la macro selezionerà la cella relativa alla data e alla commessa inserita.

    Fai sapere se era questo che volevi.
     
    Function TrovaColonna(Tabella_Dati As Range, parola As Variant) As Variant
        If parola = "" Then
            TrovaColonna = ""
         Exit Function
        End If
        TrovaColonna = Tabella_Dati.Find(parola, LookAt:=xlWhole).Column
    End Function
    
    Function TrovaRiga(Tabella_Dati As Range, parola As String) As Variant
        If parola = "" Then
            TrovaRiga = ""
         Exit Function
        End If
        TrovaRiga = Tabella_Dati.Find(parola, LookAt:=xlWhole).Row
    End Function
    
    
    Sub SelezionaCella()
    Dim ur As Long
    Dim elencodate As Range
    Dim commesse As Range
    Dim rig As Long
    Dim col As Long
    Dim miadata As String
    Dim commessa As String
    ur = Cells(Rows.Count, 1).End(xlUp).Row
    Set elencodate = Range("a2:a" & ur)
    Set commesse = Range("h1:aa1")
    miadata = InputBox("Immettere la data")
    rig = TrovaRiga(elencodate, miadata)
    commessa = InputBox("Immettere la commessa")
    col = TrovaColonna(commesse, commessa)
    Cells(rig, col).Select
    End Sub
    






  • di alfrimpa data: 02/03/2016 12:08:29

    Nik però pensavo che in questo modo sei costretto a fare un'operazione alla volta lanciando continuamente la macro e la cosa non è che sia molto comoda.

    Penso che una userform in cui inserisci data, commessa e ore ed un pulsante che vada ad inserrire le ore nella giusta cella possa essere più semplice come "operatività".

    Alfredo





  • di NIK (utente non iscritto) data: 02/03/2016 12:32:13

    Perfetta la macro.
    Ma in effetti è un pò brigosa.
    La tua proposta di una userform sarebbe molto utile ... ma scusa la mia ignoranza perchè non sò cos'è e come si usa.

    Grazie mille

    Ciao



  • di alfrimpa data: 02/03/2016 12:33:20

    Nik giusto per fare un esempio ho allegato un altro file (NIK2.xlsm) dove ho messo in pratica quello che dicevo prima.

    Ovviamente si può adattare il tutto alle tue esigenze.

    Alfredo





  • di NIK (utente non iscritto) data: 02/03/2016 15:33:08

    Ok perfetta.
    Però ho provato ad inserire tutti i giorni dell'anno e le commesse fino alla 300 (anche se potrebbero essere di più) ed ho visto che così come impostata non legge tutti le date/commesse.
    Ho provato a modificarla ma devo fare ancora esperienza !!!
    In aggiunta ti chiedo un ultimo favore: se nella maschera userform, quando chiede di inserire il numero commessa, preveda anche di considerare i campi precedenti (Permessi, Ferie, Malattia, Straordinario), perchè così uso la stessa per inserire le ore anche in questio campi.
    Ti allego il file excel completo con le date fino al 31/12/2016 ed un esempio fino a 300 commesse.

    Grazie

    NIK



  • di alfrimpa data: 03/03/2016 11:58:58

    Ciao Nik

    Dopo aver visto il tuo file "completo" mi sono convinto che anche il sistema con la userform è farraginoso e poco pratico per cui ho cambiato nuovamente approccio che vedrai nel nuovo file che ti ho allegato (MacroORE_2.xlsm).

    In pratica ho inserito nel file un nuovo foglio denominato "IMMISSIONE" per l'inserimento delle ore.

    Vi troverai una tabella con tre campi: DATA, COMMESSA e ORE.

    I campi DATA e COMMESSA hanno una convalida dati in cui potrai scegliere le date e le commesse senza avere il rischio di errate digitazioni.

    Nel momento in cui andrai a digitare il numero delle ore e premerai INVIO automaticamente andrà in esecuzione la macro che vedi sotto che inserirà il numero delle ore digitato nella specifica cella del foglio "ore".

    In questa maniera avrai anche lo "storico" di tutti i valori inseriti che può esserti utile per eventuali controlli o altro.

    Provalo un po' e fammi sapere.

    Alfredo

     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ur As Long
    Dim elencodate As Range
    Dim commesse As Range
    Dim rig As Long
    Dim col As Long
    Dim miadata As String
    Dim commessa As String
    Dim ore As Long
    On Error Resume Next
    ur = Worksheets("ore").Cells(Rows.Count, 1).End(xlUp).Row
    Set elencodate = Worksheets("ore").Range("a2:a" & ur)
    Set commesse = Worksheets("ore").Range("d5:ku5")
    If Not Intersect(Target, Range("C2:C10000")) Is Nothing Then
    miadata = Target.Offset(0, -2).Value
    rig = Application.WorksheetFunction.Match(miadata, elencodate, 0) + 1
    commessa = Target.Offset(0, -1).Value
    col = Application.WorksheetFunction.Match(commessa, commesse, 0) + 3
    ore = Target.Value
    Worksheets("ore").Cells(rig, col).Value = ore
    End If
    End Sub
    






  • di alfrimpa data: 04/03/2016 14:25:07

    Ciao Nik

    Allegato nuovo file (MacroORE_3.xlsm) dove ho fatto una piccola modifica.

    Al termine dell'inserimento viene visualizzata una finestra con un riepilogo dei dati immessi.

    Alfredo





  • di NIK (utente non iscritto) data: 04/03/2016 17:56:28

    Grazie mille.
    Avrei però bisogno di visualizzare le colonne A e B del foglio "ore".
    Questo perchè ho bisogno di visualizzare le date di inserimento per ogni riga in modo tale da fare controlli successivi



  • di alfrimpa data: 04/03/2016 18:16:45

    Questo lo puoi fare anche tu: sono semplicemente colonne nascoste; le devi solo allargare.

    Per il resto come ti pare funzioni il file?

    Alfredo