Excel Forum Per condividere esperienze su Microsoft Excel

Valore dell'ultima riga ai fini del ciclo FOR...NEXT

  • Messaggi
  • OFFLINE
    L2018
    Post: 6
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Junior
    EXCEL 2016 - SPREAD32
    00 29/03/2020 16:23
    Salve,
    in giro ho trovato questa macro, che riesce ad ordinare le righe di valori numerici non ordinati, del tipo estrazioni lotto ecc.

    Public Sub SortByString()
    Dim row As Range
    For Each row In Selection.Rows

    row.Sort Key1:=row, Order1:=xlAscending, Orientation:=xlSortRows

    Next row
    End Sub

    andrebbe bene, anzi VA bene, ma vorrei evitare il concetto di Selezione, la macro deve agire dalla prima all'ultima riga (non vuota), quale che essa sia.
    Che istruzione/i bisognerebbe inserire per ottenere che "senza selezionare nulla", alla massima velocità e senza orpelli, il ciclo esegua qualcosa del tipo "for variabile dalla 1 alla ultima riga...." ?
    A me basta che venga fatta salva l'istruzione dell'ordinamento (la quarta della macro.
    Che disonore dover sempre chiedere, ma forse siamo qui per questo 😉
    Grazie anticipate

    LEO
    https://t.me/LordBrum
  • OFFLINE
    dodo47
    Post: 2.610
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 29/03/2020 17:08
    Ciao
    a patto che non vi siano rihe/colonne vuote, ti posizioni sulla prima cella e:

    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    For Each Row In Selection.Rows
    Row.Sort Key1:=Row, Order1:=xlAscending, Orientation:=xlSortRows
    Next Row

    saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    L2018
    Post: 6
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Junior
    EXCEL 2016 - SPREAD32
    00 29/03/2020 17:25
    ti ringrazio molto, funziona.
    Ho provato anche senza posizionarmi, e non va, poi ho provato a posizionarmi su una riga qualsiasi e in effetti ordina le righe a valle ma non quelle a monte.
    E' proprio necessario posizionarsi ?
    comunque già così è ottimo risultato.
    ciao

    LEO
    https://t.me/LordBrum
  • OFFLINE
    L2018
    Post: 7
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Junior
    EXCEL 2016 - SPREAD32
    00 29/03/2020 17:29
    nel frattempo ho capito che mi basterebbe un comando select iniziale per auto posizionarmi alla prima riga, ma non lo so costruire, è chiaro che non conosco manco l'ABC del VBA.
    Complimenti anche per la coetaneità

    LEO
    https://t.me/LordBrum
  • OFFLINE
    locatevaresino
    Post: 2.292
    Registrato il: 21/03/2008
    Città: LOCATE VARESINO
    Età: 76
    Utente Veteran
    2007 / 13
    00 29/03/2020 17:31
    ciao

    bisogna sempre definire il range() su cui lavorare

    Public Sub SortByStringRiga()
    Dim row As Range
    ''For Each row In Selection.Rows
    For Each row In Range("A1:J1")
    row.Sort Key1:=row, Order1:=xlAscending, Orientation:=xlSortRows
    Next row
    End Sub

    Public Sub SortByStringColonna()
    Dim Col As Range
    ''For Each Col In Selection.Columns
    For Each Col In Range("A1:A10")
    Col.Sort Key1:=Col, Order1:=xlAscending, Orientation:=xlSortColumns
    Next Col
    End Sub

    Ciao da locate
    excel 2007 / 13
  • OFFLINE
    L2018
    Post: 8
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Junior
    EXCEL 2016 - SPREAD32
    00 29/03/2020 17:35
    Trovato un comando:
    Range("A1").End(xlUp).Offset(1, 0).Select
    per autoposizionarmi sulla prima riga.
    ora l'esecuzione è al top
    Grazie ancora

    LEO
    https://t.me/LordBrum
  • OFFLINE
    L2018
    Post: 9
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Junior
    EXCEL 2016 - SPREAD32
    00 29/03/2020 17:43
    acc, Varesino, ho risposto al buio per la soddisfazione di aver scovato il comando di posizionamento su riga 1, e non mi sono accorto del tuo intevento.
    Te ne ringrazio e vado a provare anche la tua soluzione.
    A tuttora la macro che ho è:

    Public Sub SortByString()
    Application.ScreenUpdating = False
    Range("A1").End(xlUp).Offset(1, 0).Select
    Application.ScreenUpdating = False
    Dim row As Range
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    For Each row In Selection.Rows
    row.Sort Key1:=row, Order1:=xlAscending, Orientation:=xlSortRows
    Next row
    Application.ScreenUpdating = True
    Range("A65000").End(xlUp).Offset(1, 0).Select
    End Sub

    LEO
    https://t.me/LordBrum