RICHIESTA AIUTO



  • RICHIESTA AIUTO
    di leonardocarrani data: 14/01/2014 09:25:33

    Salve a tutti,
    in un posto precedente avevo chiesto aiuto per creare un codice che copiasse in altro foglio alcune celle in base al valore di altra cella.
    Dovendo elaborare moltissimi dati (anche 600.000) è risultato più veloce il codice che ho riportato sotto (by SCOSSA).
    Funziona bene ma c'è un grosso problema per l'utilizzo che ne devo fare...
    Mi sono accorto che se i dati da elaborare contengono nella colonna E fino a 65.536 "OK", allora funziona
    da 65.537 "OK" in su mi da "errore di Run-Time '13': Tipo non corrispondente", sulla riga
    vArr = .Index(ws1.Columns("A:D"), .Transpose(Split(sRow)), Array(1, 2, 3, 4))

    Potete aiutarmi a risolvere questo problema?

    Grazie
    Leonardo
     
    Sub Test()
    
      Dim ws1 As Worksheet, ws2 As Worksheet
      Dim rng As Range, cella As Range
      Dim vArr As Variant, sRow As String, nLR As Long
      Dim nStart As Single
      
      nStart = Timer
      
      Set ws1 = Sheets("PIPPO")
      Set ws2 = Sheets("PLUTO")
      nLR = ws1.Cells(Rows.Count, 5).End(xlUp).Row
      Set rng = ws1.Range("E2:E" & nLR)
      
      For Each cella In rng
        If cella.Value = "OK" Then sRow = sRow & " " & cella.Row
      Next
      sRow = Trim(sRow)
      
      With Application
          vArr = .Index(ws1.Columns("A:D"), .Transpose(Split(sRow)), Array(1, 2, 3, 4))
      End With
      nLR = ws2.Cells(Rows.Count, 1).End(xlUp).Row
      ws2.Range("A" & nLR + 1 & ":D" & UBound(vArr) + nLR) = vArr
      
      Set rng = Nothing
      Set ws1 = Nothing
      Set ws2 = Nothing
    
      MsgBox "Tabella copiata in " & Timer - nStart
      
    End Sub



  • di Grograman (utente non iscritto) data: 14/01/2014 10:07:42

    Il problema deriva dal fatto che 65536 è esattamente 2^16, limite della variabile stringa.
    Ora... a livello di numero di caratteri vedo da guida in linea che dovrebbe arrivare a 2^31, quindi aspettiamo fiduciosi l'intervento del maestro perchè io non so come aggirare il problema!




  • di patel data: 14/01/2014 10:30:47

    Non sei un novellino Leonardo, dovresti sapere che nei forum non sono graditi titoli di questo genere, il titolo deve indicare il problema proposto





  • di leonardocarrani data: 14/01/2014 10:31:51

    Altro problema:

    se aumento le colonne (portate da 5 a 6 come da codice sotto)...mi da errore anche con molti meno dati...
     
    Dim ws1 As Worksheet, ws2 As Worksheet
      Dim rng1 As Range, cella As Range
      Dim vArr As Variant, sRow As String, nLR As Long
      
      
      Set ws1 = Sheets("Foglio1")
      Set ws2 = Sheets("Foglio2")
      nLR = ws1.Cells(Rows.Count, 6).End(xlUp).Row
      Set rng1 = ws1.Range("F1:F" & nLR)
      
      For Each cella In rng1
        If cella.Value = "OK" Then sRow = sRow & " " & cella.Row
      Next
      sRow = Trim(sRow)
      
      With Application
          vArr = .Index(ws1.Columns("A:E"), .Transpose(Split(sRow)), Array(1, 2, 3, 4, 5))
      End With
      nLR = ws2.Cells(Rows.Count, 1).End(xlUp).Row
      ws2.Range("A" & nLR + 1 & ":E" & UBound(vArr) + nLR) = vArr
      
      Set rng1 = Nothing
      Set ws1 = Nothing
      Set ws2 = Nothing



  • di leonardocarrani data: 14/01/2014 10:40:05

    Chiedo scusa per il titolo, ma non sapevo prorio cosa scrivere. Inizialmente avevo inserito una risposta nel POST originale ma non ho ricevuto nessun intervento, allora ho provato così, senza pensare che potesse essere un problema. C'è modo di cambiare il titolo del post?



  • di patel data: 14/01/2014 10:50:39

    non c'è il modo, ricordatelo per il futuro





  • di scossa (utente non iscritto) data: 18/01/2014 23:53:57

    cit. grograman: "Il problema deriva dal fatto che 65536 è esattamente 2^16, limite della variabile stringa.
    Ora... a livello di numero di caratteri vedo da guida in linea che dovrebbe arrivare a 2^31, quindi aspettiamo fiduciosi l'intervento del maestro perchè io non so come aggirare il problema!"

    Non è un problema di stringa ma di .Transpose come ho risposto qui:
    h_t_t_p://www.excelvba.it/Forum/thread.php?f=2&t=5661