View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming
Keith Willshaw Keith Willshaw is offline
external usenet poster
 
Posts: 170
Default How do I Delete Lines from VBA Array?


"Quizarate" wrote in message
...
I have an array in VBA with about 10,000 lines of data, which I am writing

to a text file. I can do this with no problem. However, before I write the
array to the text file, I want to delete lines that have certain values in
them. An example of the code I am playing with is he

For i = UBound(ForecastDataArray, 1) To 1 Step -1
If ForecastDataArray(i, 4) = "0000000" Then
ForecastDataArray.row(i).Delete
End If
Next i

I know this won't work, but I wanted to give people an idea of what I am

trying to do. If 0000000 is found in row i, column 4, then I want to delete
the entire row from my array. I know I could write the array to Excel, do
my search there, delete the lines out, then save the sheet as a text file,
but in the future, the array is going to have well over 200,000 lines in it,
so I won't be able to write it to excel.

Any help or suggestions are appreciated.

TIA,

Quiz


You may want to rethink this plan

I dont think you'll be able to allocate enough memory in VBA
to cope with 200,000 lines of text as a single VBA Array

The problem is that each VBA character takes 10+1 bytes of memory
and if you have only 10-15 chars per string thats around 2 kb per line

200,000 lines would be pushing 400,000 kb of memory
and I think thats beyond anything VBA can allocate

Its also going to be slow as hell since what you do
when you allocate a variable is give VBA a chunk of meory
to play with and when you do a search and replace it has to
start at the top of the memory block and look down


it until it finds the entry it wants

It sounds to me like you need to look at moving to a database
type solution , using ADO recordsets persisted in a jet database
may be a better option. At least then you have can goto the
next record each time without having to search from the top.

To answer your original question the best way to this is to filter
the original array into a new array

See
http://msdn.microsoft.com/library/de...ringarrays.asp

Keith