I have declared a 4 D array then 'filled' it with some data. I know enough about arrays to get a value out of it e.g. MsgBox "output " & FourDarr(2,1,2,3). This works as long as I am in the same Sub. Maybe I should be just satisfied that I got this far. But the point of making this monstrous array is that I could then, at any time and in any module, simply come up with the 'coordinates' (by this I mean the '2,1,2,3' that I used in my earlier example) then call up the value stored in the array. I am using r,h,i and s for the four values. So maybe I would say ws.Range("R7") = FourDarr(4,h,7,6) and the value stored in that position in the array would appear in R7. Obvs I am simplifying what I would actually do so as to make the point simply. I have tried declaring the array as a Public variable. I have tried calling it in a sub but I don't like that and it didn't work. The reason I don't like it is my understanding(which could be wrong) that that would run the process of loading the array each time its called and that would defeat my purpose of putting that process up front so the wait time is only slightly annoying once rather than each time it is called. At least up to this point in development, I don't have any plans to modify the values in the array as I use them in the various modules and subs and would only need to read out the value stored. Not sure if that fact would change the best answer. I could just read the original data off of a sheet where it comes from but my understanding (again subject to its own inaccuracies) using an Array should be much faster and would certainly be less cumbersome code wise. I have searched around and found lots of articles , blogs on the basics on how to use an array and a few mentioned the Public variable and other ideas but my brain is not getting around this one. All help is much appreciated.