Risultati da 1 a 26 di 26

Discussione: Riportare in riga, solo celle non vuote formanti colonne



  1. #1
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Riportare in riga, solo celle non vuote formanti colonne

    Salve ragazzi, come da titolo, ho un problema sul mettere in ordine delle colonne di cui mi servono solo le celle non nulle.

    In sostanza, guardando il file che vi ho allegato, nel foglio 2 voglio elencare gli elementi della colonna B che corrispondono ad elementi della colonna C che hanno valori non nulli.

    E' possibile farlo senza Macro?

    Grazie.
    File Allegati File Allegati
    Ultima modifica fatta da:Canapone; 06/02/17 alle 15:03

  2. #2
    L'avatar di Catwoman
    Clicca e Apri
    Data Registrazione
    Aug 2016
    Località
    Tenerife
    Messaggi
    762
    Versione Office
    2013
    Likes ricevuti
    131
    Likes dati
    701

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Benvenuto Brian747,
    i ragazzi sicuramente appena potranno ti daranno la soluzione.
    Quando ha due minuti passa da QUI cosi ci dici qualcosa di te!

    Per mettere una simpatica foto dell'avatar potrai trovare le istruzioni QUI
    Grazie
    Sii gentile quando possibile. È sempre possibile
    (Dalai Lama)

  3. #3
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    In realtà, se esistesse un modo per creare una macro per le prime sei colonne, e poi iterarla per le "enne" colonne, avrei risolto.

    Ma si può fare?

  4. #4

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Citazione Originariamente Scritto da brian747 Visualizza Messaggio
    In realtà, se esistesse un modo per creare una macro per le prime sei colonne, e poi iterarla per le "enne" colonne, avrei risolto.

    Ma si può fare?
    Ciao,
    si può fare.
    Codice: 
    Option Explicit
    Sub inserisci()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim i As Integer, y As Long, x As Long, uRiga As Long, Ucol As Long
        Set sh1 = Worksheets(1)
        Set sh2 = Worksheets(2)
            With sh1
                uRiga = .Cells(Rows.Count, 1).End(xlUp).Row
                Ucol = .Cells(1, Columns.Count).End(xlToLeft).Column
                i = 1
                    For y = 1 To uRiga
                        For x = 1 To Ucol
                            If .Cells(y + 1, x + 1) > 0 Then
                                sh2.Cells(i, 1).Value = .Cells(1, x + 1).Value
                                sh2.Cells(i, 2).Value = .Cells(y + 1, 1).Value
                                sh2.Cells(i, 3).Value = .Cells(y + 1, x + 1).Value
                                i = i + 1
                            End If
                        Next x
                    Next y
            End With
        Set sh1 = Nothing
        Set sh2 = Nothing
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  5. #5
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Ciao ges, grazie per la risposta.
    Non mi è ben chiaro cosa faccia la tua macro.

    Ne ho creata una che mi fa un ciclo completo di operazioni sulle prime colonne, ora vorrei ripeterlo per le circa 900 colonne che mi rimane da elaborare.

    Codice: 
    Sub Macro3()
    '
    ' Macro3 Macro
    '
    
    
    '
    Range("B8:B73").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("MATRICE C_macro").Select
    Range("E3").Select
    ActiveSheet.Paste Link:=True
    Sheets("MATRICE B.0").Select
    ActiveWindow.SmallScroll Down:=-33
    Range("C8:C73").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("MATRICE C_macro").Select
    Range("F3").Select
    ActiveSheet.Paste Link:=True
    Sheets("MATRICE B.0").Select
    Range("C7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("MATRICE C_macro").Select
    Range("D3:D68").Select
    ActiveSheet.Paste Link:=True
    Sheets("MATRICE B.0").Select
    Range("C6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("MATRICE C_macro").Select
    Range("C3:C68").Select
    ActiveSheet.Paste Link:=True
    Sheets("MATRICE B.0").Select
    Range("C5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("MATRICE C_macro").Select
    Range("B3:B68").Select
    ActiveSheet.Paste Link:=True
    Sheets("MATRICE B.0").Select
    Range("C4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("MATRICE C_macro").Select
    ActiveWindow.SmallScroll Down:=-6
    Range("A3:A68").Select
    ActiveSheet.Paste Link:=True
    ActiveWindow.SmallScroll Down:=39
    Rows("68:68").Select
    Application.CutCopyMode = False
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
    End With
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    ActiveWindow.SmallScroll Down:=-48
    Range("A1").Select
    End Sub
    Leggendo qui sul forum, ho inteso che dovrei usare i comandi for e next ma mi sto un pò incartando con le definizioni delle variabili.
    E' più facile per te darmi una dritta in questo senso?

    PS. Questa macro mi elenca tutti i valori e non solo quelli non nulli ma dopo potrei tranquillamente usare una pivot ed elaborare il tutto. Se questo post è troppo OT apro un'altra discussione immediatamente.
    Ultima modifica fatta da:ges; 28/09/16 alle 00:32 Motivo: Inserito codice nei TAG

  6. #6

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Citazione Originariamente Scritto da brian747 Visualizza Messaggio
    Ciao ges, grazie per la risposta.
    Non mi è ben chiaro cosa faccia la tua macro.
    ...
    Intanto dimmi se il mio codice fa quello che avevi richiesto.
    Hai scaricato il file che ho allegato e cliccato sul bottone nel foglio2?

    P.S._ il codice va inserito nei TAG, stavolta l'ho fatto io per te.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  7. #7
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Ops, scusa.

    Mi**** lo fa benissimo! Mi occorre solo che ordina prima tutte le cause 1 poi tutte le cause 2 e così via.
    Come lo riporto sul file mio?

  8. #8

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Sul tuo file dopo averlo aperto schiacci i tasti ALT+F11.
    Ti si apre una finestra bianca -> incolla il codice che ho postato sopra nel post 4.
    Poi hai due strade:
    1) Rimanendo nella schermata in cui hai incollato il codice schiacci sulla tastiera F5 (ed esegui la macro)
    2) Metti un bottone sul foglio e assegni la macro (come ho fatto io)
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  9. #9
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    mmm, non riesco... Cioè la macro gira ma non tira fuori nessun dato.

    Domani ci riprovo e ti dico se riesco. Grazie tante per l'aiuto!!

  10. #10

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne



    Per come inserire il codice dai un'occhiata a questo video

    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  11. #11

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Citazione Originariamente Scritto da brian747 Visualizza Messaggio
    ...Mi occorre solo che ordina prima tutte le cause 1 poi tutte le cause 2 e così via.
    ..
    Questa richiesta mi era sfuggita, rimedio subito.
    Codice: 
    Option Explicit
    Sub inserisci()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim i As Integer, y As Long, x As Long, uRiga As Long, Ucol As Long
        Set sh1 = Worksheets(1)
        Set sh2 = Worksheets(2)
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
            With sh1
                uRiga = .Cells(Rows.Count, 1).End(xlUp).Row
                Ucol = .Cells(1, Columns.Count).End(xlToLeft).Column
                i = 1
                    For y = 1 To uRiga
                        For x = 1 To Ucol
                            If .Cells(y + 1, x + 1) > 0 Then
                                sh2.Cells(i, 1).Value = .Cells(1, x + 1).Value
                                sh2.Cells(i, 2).Value = .Cells(y + 1, 1).Value
                                sh2.Cells(i, 3).Value = .Cells(y + 1, x + 1).Value
                                i = i + 1
                            End If
                        Next x
                    Next y
            End With
            With sh2
               .Columns("A:A").Insert Shift:=xlToRight
                For y = 1 To uRiga
                    .Cells(y, 1) = Trim(Mid(Cells(y, 2), 6, 6))
                Next
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=Range("A1:A" & uRiga), SortOn:=xlSortOnValues, Order:=xlAscending
            End With
                With sh2.Sort
                    .SetRange Range("A1:D" & uRiga)
                    .Header = xlGuess
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
        sh2.Columns("A:A").Delete Shift:=xlToLeft
        Application.Calculation = xlCalculationAutomatic
         Application.ScreenUpdating = True
         Set sh1 = Nothing
         Set sh2 = Nothing
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  12. #12
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Guardato il video eseguite attentamente le sue istruzioni (ma già ieri avevo fatto così) la macro non dà segni di attività.

    Sarà che ci sono differenze tra il file mio e quello di prova?? Non so....

    Bellissima macro, comunque: semplicissima e fa proprio quello che mi serve


    Per completezza, aggiungo un estratto del file in cui non riesco a farlo funzionare. Praticamente in foglio 2 voglio ottenere l'ordinamento secondo la macro del foglio 1...
    File Allegati File Allegati

  13. #13

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Ciao,
    non ho ben capito in quali campi del Foglio2 vorresti estrarre i valori, io intanto te li ho messi nelle colonne A,B e C.

    Codice: 
    Option Explicit
    Sub inserisci()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim i As Integer, y As Long, x As Long, uRiga As Long, Ucol As Long
        Set sh1 = Worksheets(1)
        Set sh2 = Worksheets(2)
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
            With sh1
                uRiga = .Cells(Rows.Count, 1).End(xlUp).Row
                Ucol = .Cells(8, Columns.Count).End(xlToLeft).Column
                i = 2
                    For y = 9 To uRiga
                        For x = 2 To Ucol
                            If .Cells(y, x + 1) > 0 Then
                                sh2.Cells(i, 1).Value = .Cells(8, x + 1).Value
                                sh2.Cells(i, 2).Value = .Cells(y, 2).Value
                                sh2.Cells(i, 3).Value = .Cells(y, x + 1).Value
                                i = i + 1
                            End If
                        Next x
                    Next y
            End With
            With sh2
               .Columns("A:A").Insert Shift:=xlToRight
                For y = 2 To uRiga
                    .Cells(y, 1) = Trim(Mid(Cells(y, 2), 6, 6))
                Next
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=Range("A2:A" & uRiga), SortOn:=xlSortOnValues, Order:=xlAscending
            End With
                With sh2.Sort
                    .SetRange Range("A2:D" & uRiga)
                    .Header = xlGuess
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
      sh2.Columns("A:A").Delete Shift:=xlToLeft
         Application.Calculation = xlCalculationAutomatic
         Application.ScreenUpdating = True
         Set sh1 = Nothing
         Set sh2 = Nothing
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  14. #14
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Sono stato poco chiaro.

    Ogni riga del foglio 2 deve essere compilata (da sinistra verso destra) con le celle del foglio 1: C5 , C6, C7, C8, le non nulle tra C9-C74 e la corrispondenti (alle non nulle) tra le B9-B74.

    Provo subito la tua macro. Funge na favola...

    Ma, mi accorgo, che ti sto rompendo l'anima perchè, semplicemente, non so leggere questa macro di poche righe che tu giustamente compili sui pochi dati che dò. Non ho modo di imparare almeno ad orientarmi in queste cose semplici?

    In pratica, mi sembra di capire che in questa parte dai i comandi per decidere quali celle compilare e come, è giusto?

    Codice HTML: 
     If .Cells(y, x + 1) > 0 Then                            sh2.Cells(i, 1).Value = .Cells(8, x + 1).Value
                                sh2.Cells(i, 2).Value = .Cells(y, 2).Value
                                sh2.Cells(i, 3).Value = .Cells(y, x + 1).Value                             i = i + 1

  15. #15

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Esatto.
    Intanto - sempre se ho capito bene - ti posto il codice come da tua ultima richiesta.
    Codice: 
    Option Explicit
    Sub inserisci()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim i As Integer, y As Long, x As Long, uRiga As Long, Ucol As Long
        Set sh1 = Worksheets(1)
        Set sh2 = Worksheets(2)
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
            With sh1
                uRiga = .Cells(Rows.Count, 1).End(xlUp).Row
                Ucol = .Cells(8, Columns.Count).End(xlToLeft).Column
                i = 2
                    For y = 9 To uRiga
                        For x = 2 To Ucol
                            If .Cells(y, x + 1) > 0 Then
                                sh2.Cells(i, 1).Value = .Cells(5, x + 1).Value
                                sh2.Cells(i, 2).Value = .Cells(6, x + 1).Value
                                sh2.Cells(i, 3).Value = .Cells(7, x + 1).Value
                                sh2.Cells(i, 4).Value = .Cells(8, x + 1).Value
                                sh2.Cells(i, 5).Value = .Cells(y, 2).Value
                                sh2.Cells(i, 6).Value = .Cells(y, x + 1).Value
                                i = i + 1
                            End If
                        Next x
                    Next y
            End With
            With sh2
               .Columns("A:A").Insert Shift:=xlToRight
                For y = 2 To uRiga
                    .Cells(y, 1) = Trim(Mid(Cells(y, 5), 6, 6))
                Next
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=Range("A2:A" & uRiga), SortOn:=xlSortOnValues, Order:=xlAscending
            End With
                With sh2.Sort
                    .SetRange Range("A2:G" & uRiga)
                    .Header = xlGuess
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
      sh2.Columns("A:A").Delete Shift:=xlToLeft
         Application.Calculation = xlCalculationAutomatic
         Application.ScreenUpdating = True
         Set sh1 = Nothing
         Set sh2 = Nothing
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  16. #16
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Allora: copiando/incollando questo codice sul mio file continuo a non riuscire a farlo funzionare. Allora ho provato a incollare i miei dati sul tuo file esempio ma la macro si ferma alla riga 112. C'è qualche problema?

    Ma soprattutto, perchè nel mio file non riesco a farlo andare??

  17. #17

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Non saprei proprio perchè sul tuo file non funziona.
    Ma le macro le hai abilitate?

    Per quanto riguarda i dati che nel mio file si fermano alla riga 112esima riga prova a verificare la colonna A del foglio1
    Questa istruzione
    Codice: 
    ...
    uRiga = .Cells(Rows.Count, 1).End(xlUp).Row
    ....
    trova l'ultima riga piena del Foglio1 non vorrei che non hai altri dati nel Foglio1 dopo la riga 112, se così fosse e hai un'altra colonna più lunga dobbiamo spostare la ricerca dell'ultima riga su tale colonna.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  18. #18
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Allora GES, credo sia un problema di "riferimenti". Perchè, ho provato a incollare i dati del mio file sul tuo file esempio e inizialmente, sbagliando, avevo incollato i dati una riga più in basso rispetto al file esempio e la macro non fungeva.

    Me ne sono accorto, ho aggiunta una riga e fungeva. Sostanzialmente, quando copio la macro nel mio file perde i riferimenti e quindi non funziona. Ho modo di accorgermi ,da ignorante, dove "punta" l'inizio della macro?

    Grazie infinite, davvero

  19. #19

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Citazione Originariamente Scritto da brian747 Visualizza Messaggio
    .... Ho modo di accorgermi ,da ignorante, dove "punta" l'inizio della macro?

    .
    Non è difficile
    Il punto di inizio dipende da queste variabili y e x
    Codice: 
    For y = 9 To uRiga
                        For x = 2 To Ucol
    La variabile y parte dalla riga 9 e va a scendere, questo perchè i dati "problema1, problema2, ecc." vanno dalla riga 9 in basso ... se li sposti in una riga superiore o inferiore dovrai modificare questa parte del codice.
    Mentre la variabile x, va dalla colonna 2 (B) a destra fino all'ultima piena che io conto sulla riga 8 perchè lì ci sono i dati "Causa1, Causa2, ecc.)
    Codice: 
    Ucol = .Cells(8, Columns.Count).End(xlToLeft).Column
    Anche qui se sposti i dati devi modificare il codice.

    La parte che copia i dati è questa che si adatta in base ai valori iniziali della variabile y e x come ti ho detto sopra
    Codice: 
    If .Cells(y, x + 1) > 0 Then
                                sh2.Cells(i, 1).Value = .Cells(5, x + 1).Value
                                sh2.Cells(i, 2).Value = .Cells(6, x + 1).Value
                                sh2.Cells(i, 3).Value = .Cells(7, x + 1).Value
                                sh2.Cells(i, 4).Value = .Cells(8, x + 1).Value
                                sh2.Cells(i, 5).Value = .Cells(y, 2).Value
                                sh2.Cells(i, 6).Value = .Cells(y, x + 1).Value
                                i = i + 1
                            End If
    Questa è la parte che mette in ordine le varie cause e poichè l'ordine crescente avrebbe messo causa1, causa10 e poi causa2 ho utilizzato una colonna A in cui estraggo solo il dato numerico 1,2,3, ecc. metto in ordine e poi la cancello.
    Codice: 
    With sh2
               .Columns("A:A").Insert Shift:=xlToRight
                For y = 2 To uRiga
                    .Cells(y, 1) = Trim(Mid(Cells(y, 5), 6, 6))
                Next
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=Range("A2:A" & uRiga), SortOn:=xlSortOnValues, Order:=xlAscending
            End With
                With sh2.Sort
                    .SetRange Range("A2:G" & uRiga)
                    .Header = xlGuess
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
      sh2.Columns("A:A").Delete Shift:=xlToLeft
    Se hai ancora dubbi, chiedi pure.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  20. I seguenti 2 utenti hanno dato un "Like" a ges per questo post:


  21. #20
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne



    Ci lavoro e ti fò sapere.

  22. #21
    L'avatar di Catwoman
    Clicca e Apri
    Data Registrazione
    Aug 2016
    Località
    Tenerife
    Messaggi
    762
    Versione Office
    2013
    Likes ricevuti
    131
    Likes dati
    701

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Io sono la solita guastafeste...ma Brian....

    ti ricordo che per mettere una simpatica foto dell'avatar potrai trovare le istruzioni QUI

    (sorry per l'intrusione )
    Sii gentile quando possibile. È sempre possibile
    (Dalai Lama)

  23. I seguenti utenti hanno dato un "Like"


  24. #22
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    G

  25. #23
    L'avatar di brian747
    Clicca e Apri
    Data Registrazione
    Sep 2016
    Località
    Napoli
    Messaggi
    12
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    2

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Ges non sono riuscito ad adattare il codice per farlo funzionare nel mio file.

    Trasando i miei dati nel file tuo, però, sono riscito ad ad ottenere un risultato utile. Ci riproverò sicuramente ma al momento il tempo che ho è questo.

    Arigatou

  26. #24
    L'avatar di pkrome59
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Reggio Calabria
    Età
    58
    Messaggi
    1188
    Versione Office
    Office 2013
    Likes ricevuti
    1198
    Likes dati
    2133

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Ciao brian747, e un cordiale saluto all'amico Ges, francamente nutro qualche dubbio sulla natura del problema, ma per quello che ho capito, un'alternativa con le formule potrebbe essere la seguente:

    In Foglio2 A2:
    =INDICE(Foglio1!$C$5:$K$7;COLONNE($A$2:A$2);CONFRONTA($D2;Foglio1!$C$8:$K$8;0))
    da trascinare verso destra fino a C2 e successivamente da tirare giù alla bisogna;

    In Foglio2 D2:
    =SE(RIF.RIGA(Foglio1!$C9)-8<=CONTA.SE(Foglio1!$C$9:$C$74;">"&0);Foglio1!$C$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-8<=CONTA.SE(Foglio1!$D$9:$D$74;">"&0);Foglio1!$D$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-8<=CONTA.SE(Foglio1!$E$9:$E$74;">"&0);Foglio1!$E$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-CONTA.SE(Foglio1!$E$9:$E$74;">"&0)-8<=CONTA.SE(Foglio1!$F$9:$F$74;">"&0);Foglio1!$F$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-CONTA.SE(Foglio1!$E$9:$E$74;">"&0)-CONTA.SE(Foglio1!$F$9:$F$74;">"&0)-8<=CONTA.SE(Foglio1!$G$9:$G$74;">"&0);Foglio1!$G$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-CONTA.SE(Foglio1!$E$9:$E$74;">"&0)-CONTA.SE(Foglio1!$F$9:$F$74;">"&0)-CONTA.SE(Foglio1!$G$9:$G$74;">"&0)-8<=CONTA.SE(Foglio1!$H$9:$H$74;">"&0);Foglio1!$H$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-CONTA.SE(Foglio1!$E$9:$E$74;">"&0)-CONTA.SE(Foglio1!$F$9:$F$74;">"&0)-CONTA.SE(Foglio1!$G$9:$G$74;">"&0)-CONTA.SE(Foglio1!$H$9:$H$74;">"&0)-8<=CONTA.SE(Foglio1!$I$9:$I$74;">"&0);Foglio1!$I$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-CONTA.SE(Foglio1!$E$9:$E$74;">"&0)-CONTA.SE(Foglio1!$F$9:$F$74;">"&0)-CONTA.SE(Foglio1!$G$9:$G$74;">"&0)-CONTA.SE(Foglio1!$H$9:$H$74;">"&0)-CONTA.SE(Foglio1!$I$9:$I$74;">"&0)-8<=CONTA.SE(Foglio1!$J$9:$J$74;">"&0);Foglio1!$J$8;SE(RIF.RIGA(Foglio1!$C9)-CONTA.SE(Foglio1!$C$9:$C$74;">"&0)-CONTA.SE(Foglio1!$D$9:$D$74;">"&0)-CONTA.SE(Foglio1!$E$9:$E$74;">"&0)-CONTA.SE(Foglio1!$F$9:$F$74;">"&0)-CONTA.SE(Foglio1!$G$9:$G$74;">"&0)-CONTA.SE(Foglio1!$H$9:$H$74;">"&0)-CONTA.SE(Foglio1!$I$9:$I$74;">"&0)-CONTA.SE(Foglio1!$J$9:$J$74;">"&0)-8<=CONTA.SE(Foglio1!$K$9:$K$74;">"&0);Foglio1!$K$8;"")))))))))
    da tirare giù alla bisogna;

    In Foglio2 E2:
    =SE($D2=Foglio1!$C$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$C$9:$C$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$D$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$D$9:$D$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$E$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$E$9:$E$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$F$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$F$9:$F$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$G$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$G$9:$G$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$H$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$H$9:$H$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$I$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$I$9:$I$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$J$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$J$9:$J$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$K$8;INDICE(Foglio1!B$9:B$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$K$9:$K$74>0);CONTA.SE($D$2:$D2;$D2)));"")))))))))
    da trascinare verso destra fino ad F2 e successivamente da tirare giù alla bisogna.
    Allego il file di prova, fa sapere se può andar bene.
    Ciao.
    File Allegati File Allegati

  27. I seguenti 3 utenti hanno dato un "Like" a pkrome59 per questo post:


  28. #25

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2801
    Versione Office
    Excel 2013
    Likes ricevuti
    1019
    Likes dati
    977

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Variante della routine di @ges (che saluto ) con l'uso di matrici.
    Codice: 
    Option Explicit
    
    
    Sub Inserisci()
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim i As Integer
    Dim y As Long
    Dim x As Long
    Dim uRiga As Long
    Dim Ucol As Long
    Dim Matrix()
    Dim iArr As Long
        
        Set sh1 = Worksheets(1)
        Set sh2 = Worksheets(2)
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
            With sh1
                uRiga = .Cells(Rows.Count, 1).End(xlUp).Row
                Ucol = .Cells(8, Columns.Count).End(xlToLeft).Column
                    For y = 9 To uRiga
                        For x = 2 To Ucol
                            If .Cells(y, x + 1) > 0 Then
                                i = i + 1
                                ReDim Preserve Matrix(1 To 7, 1 To i)
                                Matrix(1, i) = .Cells(5, x + 1).Value
                                Matrix(2, i) = .Cells(6, x + 1).Value
                                Matrix(3, i) = .Cells(7, x + 1).Value
                                Matrix(4, i) = .Cells(8, x + 1).Value
                                Matrix(5, i) = .Cells(y, 2).Value
                                Matrix(6, i) = .Cells(y, x + 1).Value
                                Matrix(7, i) = CInt(Replace(.Cells(8, x + 1).Value, "causa ", ""))
                            End If
                        Next x
                    Next y
            End With
            With sh2
                Call MyQuickSort_Single(Matrix(), 1, UBound(Matrix(), 2), 7, True)
                .Range("A2:F" & UBound(Matrix(), 2) + 1) = Application.Transpose(Matrix)
            End With
         Application.Calculation = xlCalculationAutomatic
         Application.ScreenUpdating = True
         Set sh1 = Nothing
         Set sh2 = Nothing
    End Sub
    
    
    
    
    Private Sub MyQuickSort_Single(ByRef SortArray As Variant, ByVal First As Long, ByVal Last As Long, _
                                   ByVal PrimeSort As Integer, ByVal Ascending As Boolean)
    Dim Low As Long, High As Long
    Dim Temp As Variant, List_Separator As Variant
    Dim TempArray() As Variant
    ReDim TempArray(UBound(SortArray, 1))
    Dim i As Long
    
    
    Low = First
    High = Last
    List_Separator = SortArray(PrimeSort, (First + Last) / 2)
    Do
        If Ascending = True Then
            Do While (SortArray(PrimeSort, Low) < List_Separator)
                Low = Low + 1
            Loop
            Do While (SortArray(PrimeSort, High) > List_Separator)
                High = High - 1
            Loop
        Else
            Do While (SortArray(PrimeSort, Low) > List_Separator)
                Low = Low + 1
            Loop
            Do While (SortArray(PrimeSort, High) < List_Separator)
                High = High - 1
            Loop
        End If
        If (Low <= High) Then
            For i = LBound(SortArray, 1) To UBound(SortArray, 1)
                TempArray(i) = SortArray(i, Low)
            Next
            For i = LBound(SortArray, 1) To UBound(SortArray, 1)
                SortArray(i, Low) = SortArray(i, High)
            Next
            For i = LBound(SortArray, 1) To UBound(SortArray, 1)
                SortArray(i, High) = TempArray(i)
            Next
            Low = Low + 1
            High = High - 1
        End If
    Loop While (Low <= High)
    If (First < High) Then MyQuickSort_Single SortArray, First, High, PrimeSort, Ascending
    If (Low < Last) Then MyQuickSort_Single SortArray, Low, Last, PrimeSort, Ascending
    End Sub
    P.S. La routine MyQuickSort_Single non l'ho scritta io.

  29. I seguenti 2 utenti hanno dato un "Like" a Rubik72 per questo post:


  30. #26
    L'avatar di pkrome59
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Reggio Calabria
    Età
    58
    Messaggi
    1188
    Versione Office
    Office 2013
    Likes ricevuti
    1198
    Likes dati
    2133

    Re: Riportare in riga, solo celle non vuote formanti colonne

    Ciao brian747, in F2 va inserita la seguente:
    In F2:
    =SE($D2=Foglio1!$C$8;INDICE(Foglio1!C$9:C$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$C$9:$C$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$D$8;INDICE(Foglio1!D$9:D$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$D$9:$D$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$E$8;INDICE(Foglio1!E$9:E$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$E$9:$E$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$F$8;INDICE(Foglio1!F$9:F$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$F$9:$F$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$G$8;INDICE(Foglio1!G$9:G$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$G$9:$G$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$H$8;INDICE(Foglio1!H$9:H$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$H$9:$H$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$I$8;INDICE(Foglio1!I$9:I$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$I$9:$I$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$J$8;INDICE(Foglio1!J$9:J$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$J$9:$J$74>0);CONTA.SE($D$2:$D2;$D2)));SE($D2=Foglio1!$K$8;INDICE(Foglio1!K$9:K$74;AGGREGA(15;6;(RIF.RIGA(Foglio1!$C$9:$C$74)-RIF.RIGA(Foglio1!$C$9)+1)/(Foglio1!$K$9:$K$74>0);CONTA.SE($D$2:$D2;$D2)));"")))))))))
    da tirare giù alla bisogna.
    Ciao.

  31. I seguenti utenti hanno dato un "Like"


Discussioni Simili

  1. DatePicker attivo solo su celle vuote di alcune colonne
    Di AiaceT nel forum Domande su Excel VBA e MACRO
    Risposte: 10
    Ultimo Messaggio: 26/01/17, 03:31
  2. [Risolto] Inserimento di una formula vlookup solo nelle celle vuote di in una colonna
    Di WANNABE nel forum Domande su Excel VBA e MACRO
    Risposte: 6
    Ultimo Messaggio: 20/10/16, 18:19
  3. Trovare celle non vuote e riportare valore
    Di lala10 nel forum Domande su Excel in generale
    Risposte: 9
    Ultimo Messaggio: 07/05/16, 00:32
  4. riportare in un'unica riga il contenuto di diverse celle incolonnate
    Di moniques nel forum Domande su Excel in generale
    Risposte: 1
    Ultimo Messaggio: 04/02/16, 12:40
  5. Creare una lista unica con dati su piu colonne (celle vuote)
    Di Gerardo Zuccalà nel forum Domande su Excel in generale
    Risposte: 12
    Ultimo Messaggio: 13/10/15, 12:47

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •