Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    78

    [EXCEL] Probelma conteggio mensile

    Ciao a tutti, spero di scrivere nella sezione corretta,

    Ho un problema con excel e non riesco a risolverlo:

    ho una foglio di calcolo che ha i seguenti dati:

    Codice PHP:
    nome    data
    AAA    16
    -gen-08
    AAA    17
    -gen-08
    BBB    15
    -gen-08
    CCC    20
    -gen-08
    AAA    02
    -feb-08
    BBB    05
    -feb-08
    AAA    09
    -feb-08
    DDD    03
    -mar-08
    AAA    08
    -mar-08
    CCC    06
    -mar-08
    ...    ... 
    e la lista cresce ogni mese.

    quello che mi serve é ottenere una tabella con le seguenti informazioni:
    Codice PHP:
    nome    gen    feb    mar    apr
    AAA    2    2    1    0
    CCC    1    0    1    0 
    ovvero, dato un nome, contare quante volte appare in un mese.

    Grazie anticipatamente
    blp

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    1
    Ciao.

    Ciò che vorresti ottenere è, secondo me, più semplice con Access, tuttavia, se proprio vuoi utilizzare Excel, potresti utilizzare una macro (ne trovi uno script d'esempio in coda).

    L'esecuzione di detta macro prevede che le colonne siano predisposte come nel tuo esempio:
    - nella colonna A i nomi
    - nella colonna B le date
    - le colonne dalla C fino alla S vuote.


    La macro esegue i seguenti step:
    1- conteggia le volte che ogni nome appare in ciascun mese e ne riporta lo schema nelle colonne dalla C alla E
    2- utilizza lo schema appena ottenuto per generare una tabella Pivot che visualizza nello stesso foglio a partire dalla cella F1

    La tabella Pivot espone il risultato come te lo aspetti.


    Ogni volta che apporti delle variazioni all'elenco di partenza (nomi + date), puoi rieseguire la macro ed il risultato verrà aggiornato di conseguenza.


    Naturalmente puoi personalizzare la macro come meglio credi per adeguare il risultato alle tue esigenze.

    Maggiori dettagli sull'uso di macro e tabelle Pivot puoi trovarli sull'Help di Excel.

    Buon lavoro.



    Sub Prova_conta_x_mese()
    ' CONTO QUANTE VOLTE COMPARE CIASCUN NOME IN UNO STESSO MESE
    ' POI SCHEMATIZZO IL RISULTATO A CAMPI INCROCIATI
    '
    Dim lRow As Long 'PER RIGHE DEL FILE EXCEL
    Dim saSchema(1000, 2) As Variant 'ARRAY DI 1000 RIGHE E 3 COLONNE
    'NELLE COLONNE SI VOGLIONO METTERE:
    '-NOME
    '-MESE
    '-CONTEGGIO
    Dim lIndArr, lItmp As Long 'INDICI PER L'ARRAY
    Dim lEsiste, lRigaPivotInizio As Long
    '
    ' CANCELLO EVENTUALI SCHEMA + PIVOT GIA' ESISTENTI
    Columns("C:S").Select
    Selection.Delete Shift:=xlToLeft
    '
    ' INIZIO ELABORAZIONE
    lRow = 2
    lIndArr = 0
    Cells(lRow, 1).Activate
    '
    ' SCORRO IL CONTENUTO DELLE COLONNE 1 E 2 DEL FOGLIO ATTIVO
    Do
    ' MEMORIZZO LE INFORMAZIONI
    If lIndArr = 0 Then
    ' ARRAY VUOTO - CARICO PRIMA RIGA
    saSchema(lIndArr, 0) = Cells(lRow, 1)
    saSchema(lIndArr, 1) = Format(Cells(lRow, 2), "mmm")
    saSchema(lIndArr, 2) = 1
    lIndArr = 1
    Else
    ' IN ARRAY GIA' QUALCOSA...
    lEsiste = 0
    For lItmp = 0 To lIndArr - 1
    ' 1- VERIFICO SE LA COMBINAZIONE GIà ESISTE E, IN CASO, CONTO + 1
    If saSchema(lItmp, 0) = Cells(lRow, 1) And saSchema(lItmp, 1) = Format(Cells(lRow, 2), "mmm") Then
    saSchema(lItmp, 2) = saSchema(lItmp, 2) + 1
    lEsiste = 1
    Exit For
    End If
    Next lItmp
    ' SE LA COMBINAZIONE NON ESISTE, AGGIUNGO COMBINAZIONE ALL'ARRAY
    If lEsiste = 0 Then
    saSchema(lIndArr, 0) = Cells(lRow, 1)
    saSchema(lIndArr, 1) = Format(Cells(lRow, 2), "mmm")
    saSchema(lIndArr, 2) = 1
    lIndArr = lIndArr + 1
    End If
    '
    End If
    ' SPOSTO ALLA CELLA SUCCESSIVA
    lRow = lRow + 1
    Loop While Trim(Cells(lRow, 1).Value) <> ""
    '
    Range("C:C").Select
    With Selection
    .ColumnWidth = 20
    .HorizontalAlignment = xlRight
    End With
    ' SCRIVO CONTEGGIO X CONSENTIRE CREAZIONE TABELLA PIVOT...
    Cells(1, 3) = "NOME"
    Cells(1, 4) = "MESE"
    Cells(1, 5) = "TOT"
    lRow = 2
    For lItmp = 0 To lIndArr - 1
    Cells(lRow, 3) = saSchema(lItmp, 0)
    Cells(lRow, 4) = saSchema(lItmp, 1)
    Cells(lRow, 5) = saSchema(lItmp, 2)
    lRow = lRow + 1
    Next lItmp
    Columns("D:E").Select
    Columns("D:E").EntireColumn.AutoFit
    '
    ' SELEZIONO L'AREA CON I DATI DELLO SCHEMA DA INSERIRE NELLA TABELLA PIVOT
    Range("C1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ' MEMORIZZO SOURCEDATA IN FORMATO R1C1, ALTRIMENTI L'ISTRUZIONE X LA CREAZIONE DELLA TABELLA PIVOT DA' ERRORE
    Dim sAddr As String
    sAddr = Selection.Address(True, True, xlR1C1) 'ESEMPIO DI RISULTATO: "R1C3:R13C5"
    '
    ' GENERO TABELLA PIVOT
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatab ase, SourceData:= _
    sAddr).CreatePivotTable TableDestination:=Range("F1"), _
    TableName:="Tabella_pivot1"
    ActiveSheet.PivotTables("Tabella_pivot1").SmallGri d = False
    With ActiveSheet.PivotTables("Tabella_pivot1").PivotFie lds("NOME")
    .Orientation = xlRowField
    .Position = 1
    End With
    With ActiveSheet.PivotTables("Tabella_pivot1").PivotFie lds("MESE")
    .Orientation = xlColumnField
    .Position = 1
    End With
    With ActiveSheet.PivotTables("Tabella_pivot1").PivotFie lds("TOT")
    .Orientation = xlDataField
    .Position = 1
    End With
    Application.CommandBars("PivotTable").Visible = False
    ActiveWorkbook.Save
    '
    End Sub
    Flo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.