Data Manipulation Classes

These classes provide the tools and data structures needed to separate your physical data in your spreadsheet, from how you process it in your procedures.  Notice that the row and column numbers begin at 1, and are relative to the start of the dataset (not the row/column on the spreadsheet), in order to abstract the cDataset from its physical location. This class is used throughout this site. Here are just a few examples of the projects illustrating its use. You may want to start with How to use cDataSet

What to download

All the examples contain all the classes needed for them to work and all projects can be found here

If you just want the main utility classes used throughout this site, in the Downloads section cDataSet.xlsm includes everything you need including some examples. 

All classes have a tearDown method. You can use these to release up any memory when you are done. You  execute this for the highest level class you use, typically a cDataSet, as follows

dim ds as cDataSet

set ds=new cDataSet
with ds.populateData(someRange)
   ... do things
end with


This is the basic element, like a worksheet cell. It remembers its original location, and keeps the value at the time of loading (or last refresh). There will be one of these for every cell in the worksheet that has been loaded. 


A collection of cDataSet.


There is one of these for each Row that contains data in scope. It contains a collection of cCell  and  a reference to the cDataSet it belongs in


There is one of these for each Column that contains data in scope. It contains a collection of  cCell , a reference to the cDataSet it belongs in, and a reference to the cThing that contains its heading title


One of these for the data in scope. Contains references to collections of cDataRow and cDataColumn as well as cHeadingRow. Most required information, for example values can be accessed directly from this class and this is the main interaction class.


One of these for the data in scope. Contains a collection of cCell describing each column heading