Condividi tramite

Macro VBA ordinare orizzontale riga per riga

Anonimo
2019-02-20T22:57:46+00:00

Buongiorno a tutti,

qualcuno mi potrebbe aiutare a creare una macro VBA per ordinare, ascendente, le celle di varie righe da sinistra a destra, trascurando la prima riga e la prima colonna?

es:

            A        B        C        D        E

1   Tecnico

2   nome01   10     20        15

3   nome02   10      5           1  

4   nome03   10      a           5       b

5   nome04    c                    b

6   nome05    1                             2

risultato che vorrei ottenere:

            A        B        C        D        E

1   Tecnico

2   nome01   10      15      20

3   nome02     1        5      10   

4   nome03     5      10        a        b

5   nome04     b        c

6   nome05     1        2

grazie in anticipo.

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

2 risposte

Ordina per: Più utili
  1. Anonimo
    2019-02-22T19:32:10+00:00

    Ciao Casanmaner,

    ci sono quasi ma mi servirebbe un altro aiuto se possibile...

    Nella colonna 'A' inserisco nomi clienti, secondo le regole per la 'Gestione Nomi', poi eseguo le macro (non essendo molto pratico per ora le tengo separate e le eseguo in sequenza, poi se tutto gira le unisco). Funziona tutto se non inserisco alcun valore in qualsiasi cella da B2 in giù, viceversa la macro 'Sub b_GestioneNomi' va un Runtime Error 1004.

    (in realtà va in Runtime error anche se non rispetto le regole di 'Gestione Nomi' e fin qui ok, il problema è che se cancello il nome scorretto comunque persiste il runtime error, devo cambiare foglio per farla funzionare).

    Sub a_Ordine_Alfabetico_Colonna_A_e_Righe()

    '

    ' Ordine_Alfabetico_Colonna_A_e_Righe Macro

    '

    '

        Cells.Select

        ActiveWorkbook.Worksheets("Lista Cliente Abilitazione Tec").Sort.SortFields. _

            Clear

        ActiveWorkbook.Worksheets("Lista Cliente Abilitazione Tec").Sort.SortFields. _

            Add Key:=Range("A1:A1000"), SortOn:=xlSortOnValues, Order:=xlAscending, _

            DataOption:=xlSortNormal

        With ActiveWorkbook.Worksheets("Lista Cliente Abilitazione Tec").Sort

            .SetRange Range("A1:CW1000")

            .Header = xlYes

            .MatchCase = False

            .Orientation = xlTopToBottom

            .SortMethod = xlPinYin

            .Apply

        End With

        Range("A1").Select

    End Sub

    Sub b_GestioneNomi()

       Dim oName As Name

       Dim rng As Range, c As Range

       Dim sNomeFoglio As String

       With Application

          For Each oName In .Names

             oName.Delete

          Next oName

       End With

       Set rng = Range("A1").CurrentRegion

       sNomeFoglio = "='" & ActiveSheet.Name & "'!"

       For Each c In rng

          Application.Names.Add Name:=c.Value, _

                                RefersTo:=sNomeFoglio & c.Offset(, 1).Address & ":" & Cells(c.row, Columns.Count).Address

       Next c

    End Sub

    Sub c_OrdinaNomi()

        Dim oName As Name

        Dim rng As Range

        With Application

           For Each oName In .Names

              Set rng = oName.RefersToRange

              rng.Sort Key1:=rng, Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortRows

           Next oName

        End With

     End Sub

    Sub d_GestioneNomiCliente()

    '

    ' GestioneNomiCliente Macro

    '

    '

        ActiveWorkbook.Names.Add Name:="Cliente", RefersToR1C1:="='Lista Cliente Abilitazione Tec'!C1"

        ActiveWorkbook.Names("Cliente").Comment = ""

        Range("A1").Select

    End Sub

    grazie dall'aiuto

    Stefano

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-02-21T06:32:17+00:00

    Ciao,

    se la cartella di lavoro è quella dove in precedenza hai creato i nomi (da tuo precedente topic) prova qualcosa del genere:

    Sub OrdinaNomi()

       Dim oName As Name

       Dim rng As Range

       With Application

          For Each oName In .Names

             Set rng = oName.RefersToRange

             rng.Sort Key1:=rng, Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortRows

          Next oName

       End With

    End Sub

    N.B. parto dal presupposto che i nomi presenti siano solo quelli creati con la precedente procedura e che non vi siano nomi che non facciano riferimento ad un intervallo di celle.

    La risposta è stata utile?

    0 commenti Nessun commento