excel 2007 - limitazione area lavoro

Anonimo
2016-02-15T11:50:30+00:00

Ciao a tutti,

ho costruito una cartella di lavoro abbastanza complessa, ma in qualche passaggio alcuni fogli si sono attivati fino a 1 milione di righe facendo esplodere il peso del file e la gestione di calcolo. 

Ho consultato alcuni forum che suggeriscono di delimitare l'area inutile e di eliminarla per fare tornare il tutto ad un peso accettabile, ma i miei tentativi in tal senso (selezione + elimina righe) sono stati inutili; l'alternativa di creare un nuovo foglio e incollare le celle è, oltre che inutilmente laboriosa, difficile in quanto per copiare la vasta area che mi sarebbe utile mi dice che comunque esaurisce le disponibilità del sistema.

Avete qualche suggerimento? Anticipatamente grazie!

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-06-19T22:21:20+00:00

Anche se dopo tanto tempo vi aggiorno (soprattutto Mauro). Alla fine ho capito perché su un certo foglio-dati aveva un rallentamento mostruoso, spesso mi andava in crash e non riuscivo a eliminare molte righe: su tutte le celle di alcune  colonne, a seguito di rimaneggiamenti notturni (parlo di centinaia di migliaia di celle almeno), erano state caricate almeno 40 formattazioni condizionali per ogni singola cella. Ti credo che faceva fatica... Povero Excel!

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-02-15T15:55:49+00:00

    Un milione di righe, perché?

    Nei limiti del possibile un milione di dati *abitano* in un db e in Excel porto solo quello che mi serve al momento.

    Per simili quantità di dati, sarebbe opportuno inoltre utilizzare la versione a 64 bit di Excel (uno dei rarissimi casi), ma l'elaborazione rimarrebbe comunque lenta se il tutto contiene formule complesse e riferimenti fra fogli.

    Comunque per copiare un milione di righe, se lo fai a blocchi ragionevoli non impalli la memoria, soprattutto se lo fai via vba gestendo bene gli oggetti e la loro distruzione man mano li hai utilizzati.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-02-15T14:32:07+00:00

    Quante righe piene ha il tuoi file?

    se non ne ha più di 65.000 potresti salvare nel vecchio formato Excel 2003 (xls) e poi tornare al formato xlsx. Questa operazione, di solito, risolve il problema.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-02-15T13:16:13+00:00

    Intanto grazie, dopo un poco mi restituisce

    "error 1004"

    circa questa riga

    .Range(.Cells(1, myLastCol + 1), _

    .Cells(1, .Columns.Count)).EntireColumn.Delete

    Però ti chiedo: è possibile che non ci sia modo per reimpostare "manualmente" l'area di lavoro e sia necessario ricorrere a VBA?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-02-15T12:14:44+00:00

    Ciao JP3BO,

    ho costruito una cartella di lavoro abbastanza complessa, ma in qualche passaggio alcuni fogli si sono attivati fino a 1 milione di righe facendo esplodere il peso del file e la gestione di calcolo. 

    Ho consultato alcuni forum che suggeriscono di delimitare l'area inutile e di eliminarla per fare tornare il tutto ad un peso accettabile, ma i miei tentativi in tal senso (selezione + elimina righe) sono stati inutili; l'alternativa di creare un nuovo foglio e incollare le celle è, oltre che inutilmente laboriosa, difficile in quanto per copiare la vasta area che mi sarebbe utile mi dice che comunque esaurisce le disponibilità del sistema.

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

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

    Option Explicit

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

    Sub DeleteUnused() 

    '\ Debra Dalgleish

    '\ http://www.contextures.com/xlfaqApp.html#Unused

    Dim myLastRow As Long

    Dim myLastCol As Long

    Dim wks As Worksheet

    Dim dummyRng As Range

    For Each wks In ActiveWorkbook.Worksheets

      With wks

        myLastRow = 0

        myLastCol = 0

        Set dummyRng = .UsedRange

        On Error Resume Next

        myLastRow = _

          .Cells.Find("*", after:=.Cells(1), _

            LookIn:=xlFormulas, lookat:=xlWhole, _

            searchdirection:=xlPrevious, _

            searchorder:=xlByRows).Row

        myLastCol = _

          .Cells.Find("*", after:=.Cells(1), _

            LookIn:=xlFormulas, lookat:=xlWhole, _

            searchdirection:=xlPrevious, _

            searchorder:=xlByColumns).Column

        On Error GoTo 0

        If myLastRow * myLastCol = 0 Then

            .Columns.Delete

        Else

            .Range(.Cells(myLastRow + 1, 1), _

              .Cells(.Rows.Count, 1)).EntireRow.Delete

            .Range(.Cells(1, myLastCol + 1), _

              .Cells(1, .Columns.Count)).EntireColumn.Delete

        End If

      End With

    Next wks

    End Sub

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

    Sub TestForMergedCells()

      Dim AnyMerged As Variant

      AnyMerged = ActiveSheet.UsedRange.MergeCells

      If AnyMerged = False Then

          MsgBox "no merged"

      ElseIf AnyMerged = True Then

          MsgBox "all merged"

      ElseIf IsNull(AnyMerged) Then

          MsgBox "mixture"

      Else

          MsgBox "never gets here--only 3 options"

      End If

    End Sub

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

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona DeleteUnused  | Esegui

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento