Cerca.vert su più fogli

Anonimo
2016-05-28T20:14:14+00:00

Ciao,

da anni uso una cartella excel 2003 con 12 fogli che corrispondono ai mesi dell’anno (Mese1, Mese2, Mese3 ecc).

La struttura è uguale per tutti i 12 fogli:

Data     Entrate     Uscite     Annotazioni

In un foglio che ho chiamato “Movimenti”

Ho necessita che al semplice inserimento di una data (es. 15/03) mi elencasse tutti i movimenti avvenuti il 15/03 (quindi dal foglio “Mese3”)

Es.:

DATA           Entrate       Uscite      Annotazioni                           

15/03/2016                     10,00     Acquisto Cancelleria

15/03/2016     60,00                     Buoni pasto Sig. Rossi

15/03/2016                     74,50     Marche da Bollo

Ecc.

Ho scandagliando il web per 10 giorni alla ricerca di una soluzione, ma senza risultato.

Come posso risolvere?

Grazie

Cecco

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-05-29T10:30:18+00:00

Ciao Cecco,

E’ perfetto ed impeccabile.

Ti tingrazio per il cortese riscontro.

Purtroppo, e per questo chiedo venia, ho dimenticato di segnalare che, in ufficio, come foglio di calcolo e installato openoffice.

Dato che il codice risponde alla tua domanda originale, vorrei chiederti gentilmente di segnare la mia risposta come Risposta. In questo modo, tu aiuterai anche coloro che potessero cercare soluzioni ai problemi simili negli archivi della Community.

Domani lo proverò ma sono certo che la macro non funzionerà a dovere come capitato per tanti altri progetti che ho realizzato.

Per quanto riguarda OpenOffice, credo che sarebbe necessario riscrivere il codice nella forma di una macro da essere eseguita su richiesta e che richiederebbe adattamento per escludere delle istruzioni che sono esclusive a Excel del genere:

        arrMese = Application.GetCustomListContents(3)

Mentre non credo che ciò rappresenti un problema insormontabile, purtroppo credo che sia al di fuori dell'ambito di questo forum.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-05-29T02:22:12+00:00

CiaoCecco,

da anni uso una cartella excel 2003 con 12 fogli che corrispondono ai mesi dell’anno (Mese1, Mese2, Mese3 ecc).

La struttura è uguale per tutti i 12 fogli:

Data     Entrate     Uscite     Annotazioni 

In un foglio che ho chiamato “Movimenti”

Ho necessita che al semplice inserimento di una data (es. 15/03) mi elencasse tutti i movimenti avvenuti il 15/03 (quindi dal foglio “Mese3”)

Es.:

   DATA           Entrate       Uscite      Annotazioni                           

15/03/2016                     10,00     Acquisto Cancelleria

15/03/2016     60,00                     Buoni pasto Sig. Rossi

15/03/2016                     74,50     Marche da Bollo

Ecc.

Ho scandagliando il web per 10 giorni alla ricerca di una soluzione, ma senza risultato.

Come posso risolvere? 

Benvenuto alla Community!

Prova qualcosa del genere:

  • Fai clic dx sulla linguetta del foglio di interesse
  • Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
  • Incolla il seguente codice:

'=========>>

Option Explicit

'--------->>

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim srcSH As Worksheet

    Dim srcRng As Range, destRng As Range

    Dim Rng As Range

    Dim arrMese As Variant, arrIn As Variant, arrOut() As Variant

    Dim vVal As Variant

    Dim Res As Variant

    Dim i As Long, j As Long, iCtr As Long

    Dim UB As Long, UB2 As Long

    Dim iRow As Long, jRow As Long

    Dim sMsg As String, sTitle As String

    Dim iButtons As Long

    Const CellaDataDiRicerca As String = "A2"                       '<<=== Modifica

    Const RigaIntestazionReport As Long = 4                          '<<=== Modifica

    Const NumeroDiColonneDati As Long = 4            ****

    Set Rng = Intersect(Me.Range(CellaDataDiRicerca), Target)

    If Not Rng Is Nothing Then

        On Error GoTo XIT

        Application.EnableEvents = False

        With Me

            jRow = LastRow(Me, .Columns("A:A"), RigaIntestazionReport + 1)

            Set destRng = .Range("A" & RigaIntestazionReport + 1). _

                          Resize(jRow - RigaIntestazionReport, NumeroDiColonneDati)

        End With

        destRng.ClearContents

        vVal = Rng.Value

        Select Case True

        Case vVal = vbNullString

            GoTo XIT

        Case Not IsDate(vVal)

            Call MsgBox( _

                 Prompt:=vVal & " non è stata risconosciuto come una data valida!", _

                 Buttons:=vbCritical, _

                 Title:="CONTROLLA DATA")

            GoTo XIT

        End Select

        arrMese = Application.GetCustomListContents(3)

        Res = arrMese(Month(vVal))

        Set srcSH = ThisWorkbook.Sheets(Res)

        With srcSH

            iRow = LastRow(srcSH, .Columns("A:A"))

            Set srcRng = .Range("A1:D" & iRow)

        End With

        arrIn = srcRng.Value

        UB = UBound(arrIn)

        UB2 = UBound(arrIn, 2)

        ReDim arrOut(1 To UB, 1 To UB2)

        For i = 1 To UB

            If arrIn(i, 1) = vVal Then

                iCtr = iCtr + 1

                For j = 1 To UBound(arrIn, 2)

                    arrOut(iCtr, j) = arrIn(i, j)

                Next j

            End If

        Next i

        If CBool(iCtr) Then

            destRng.Resize(iCtr, UB2).Value = arrOut

            sMsg = iCtr & " record sono stati trovati con la data " _

                 & Rng.Value

            iButtons = vbInformation

            sTitle = "REPORT"

        Else

            sMsg = "Nessun record è stato trovatto con la data " _

                 & Rng.Value

            iButtons = vbCritical

            sTitle = "RICERCA VUOTA!"

        End If

        Call MsgBox( _

             Prompt:=sMsg, _

             Buttons:=iButtons, _

             Title:=sTitle)

    End If

XIT:

    Application.EnableEvents = True

End Sub

'<<=========

  • Menù | Inserisci | Modulo (oppure, **Alt+IM)**per inserire un nuovo modulo di codice
  • Nel nuovo modulo vuoto, incolla il seguente codice:

'=========>>

Option Explicit

'--------->>

Public Function LastRow(SH As Worksheet, _

                        Optional Rng As Range, _

                        Optional minRow As Long = 1)

    If Rng Is Nothing Then

        Set Rng = SH.Cells

    End If

    On Error Resume Next

    LastRow = Rng.Find(What:="*", _

                       after:=Rng.Cells(1), _

                       Lookat:=xlPart, _

                       LookIn:=xlFormulas, _

                       SearchOrder:=xlByRows, _

                       SearchDirection:=xlPrevious, _

                       MatchCase:=False).Row

    On Error GoTo 0

    If LastRow < minRow Then

        LastRow = minRow

    End If

End Function

'<<========= 

  • Alt+Q per chiudere l'editor di VBA e tornare a Excel
  • Salva il file con l’estensione xlsm

Potresti scaricare il mio file di prova Cecco20160529.xlsm a:

https://www.dropbox.com/s/xj8sos86zlg8v1x/Cecco20160529.xlsm?dl=0

Nel mio file di prova ho organizzato i dati sul foglio Movimenti nel modo seguente:

Inserendo o modificando la date di ricerca nella cell A2 avvia il codice per estrarre i dati corrispondenti alla data sul foglio il cui nome corrisponde con l'abbreviazione di tre lettere del mese della data di ricerca immessa nella cella A2. Quindi, nell'esempio mostrato nello screenshot, i dati sono estratti dal foglio nominato Mar.

Ho scandagliando il web per 10 giorni alla ricerca di una soluzione, ma senza risultato.

Mentre penso sia altamente lodevole che tu abbia tentato di utilizzare Google per risolvere il problema, ora che ci hai trovato, vorrei suggerire che  prima di intraprendere di nuovo su una ricerca così estesa, dovresti prendere in considerazione la possibilità di postare dettagli del problema qui! In questa Community, troverai molti amici solo troppo contenti di aiutarti.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2016-05-29T09:40:14+00:00

    E’ perfetto ed impeccabile.

    Purtroppo, e per questo chiedo venia, ho dimenticato di segnalare che, in ufficio, come foglio di calcolo e installato openoffice.

    Domani lo proverò ma sono certo che la macro non funzionerà a dovere come capitato per tanti altri progetti che ho realizzato.

    A risentirci a domani.

    Cecco

    La risposta è stata utile?

    0 commenti Nessun commento