Quickly clear a portion of an array

The fastest way to clear an array is to ReDim (if the array is dynamic) or Erase it (if the array is Static). However, if you want to clear a portion of an array, it seems that you must code a For-Next loop.

If you are dealing with numeric arrays, there is a faster alternative, based on the ZeroMemory API function which, as it names implies, can fill a memory area with zeroes. See how you can use this function to clear a sub array of Longs:

Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (dest As _    Any, ByVal Bytes As Long)' Declare an array and fill it with dataDim a(1000) As LongFor i = 1 To UBound(a)    a(i) = iNext' Clear 100 elements, starting at a(200)    ZeroMemory a(200), 100 * Len(a(1))

Note that the number of bytes to be cleared is given by the product of the number of elements to be cleared multiplied by the length of each element. Using the Len() function ensures that the above code works even if you change the type of the array.

You can use this approach with any numeric array, as well as Variant arrays that contain only numbers (including the Decimal subtype) and arrays of User Defined Types that contains only numbers and fixed-length strings. If you use the ZeroMemory function with variable-length strings or objects what you get is a GPF.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin


Recent Articles: