2009-12-06 10 views
0

Ma configuration: Avoir 50 000 lignes de données. (Mon nombre de lignes augmentera à l'avenir. Alors, pourrait aussi bien dire que j'ai une feuille pleine de 64000+ lignes.) Toutes les données sont TEXT, pas de formules, etc.Besoin d'un code VBA de concaténation pour éviter les problèmes de mémoire Solution

La colonne A est ouvert Colonnes B à travers AC Contient les données à concaténer Les données des lignes, une fois concaténées dans la colonne A, contiennent 60 000 chiffres ou 6 Ko de taille de fichier. Après une maniuplation supplémentaire, chaque cellule deviendra un fichier.

J'ai essayé de concaténer dans Excel et je rencontre des problèmes de mémoire. Le problème de mémoire est lorsque je sélectionne et remplis la fonction de concaténation dans la feuille de calcul. Il se bloque à la ligne 8200 +/-. Mon système est de 2 Go de RAM, Windows XP professionnel et Excel 2003. Disposez de 4 Go d'espace disque

En espérant trouver un code VBA qui permettra d'économiser de la mémoire, et ne pas planter comme il le fait en Excel.

Merci

+1

Quelle est la source des données, pourquoi diable voulez-vous faire dans Excel ?! –

+2

Excel est abusé par beaucoup. C'est la voie du monde. – ChaosPandion

+0

Pourquoi écrire la concaténation dans une cellule? Gardez-le comme une chaîne en mémoire, effectuez les manipulations sur cette chaîne et écrivez les résultats dans un fichier – barrowc

Répondre

0

Bien que ce soit une utilisation inhabituelle pour Excel, supposant que chaque opération prend Enchaînement mémoire juste de libérer de la mémoire avant de vous lancer.

Pas si élégant, bien que vous puissiez faire 2000 lignes copier et coller votre Colonne A sur lui-même en tant que valeurs. Facultatif également en supprimant A2: AC2002 (les données utilisées qui peuvent ne pas être nécessaires). Désactiver le calcul automatique peut également aider. Avec Macro à partir de l'enregistreur de macro simple enregistrer une macro de vous faire [relativement positionné]. Commencez par sélectionner la formule que vous avez faite.

Code Très brut:

Sub Macro5() 

With Application 
    .EnableEvents = False 
    .ScreenUpdating = False 
End With 

Dim i As Long 

For i = 0 To 32 
    Selection.Copy 
    ActiveCell.Offset(1, 0).Range("A1:A2000").Select 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
    ActiveCell.Offset(-1, 0).Range("A1:A2000").Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = False 
    ActiveCell.Offset(2000, 0).Range("A1").Select 
Next i 

With Application 
    .EnableEvents = True 
    .ScreenUpdating = True 
End With 
End Sub