As a Programmer, I would at least look at a code soloution. In this vein, I can only come up with a few approaches.
First, a series of queries on the "raw" spreadsheet:
The overall complexity of this may be greatly influenced by the nature and reliability of the spreadsheet content. i.e. IF the data is highly relilable, some great deal of error checking may be avoided. IF all of the data segments (rows) are numeric (or the first data elementy in each row is Numeric and ALWAYS present (even if zero), then the names and data rows are easily seperated, otherwise, each row requires examiniiation (parsing) based on what can be known to be the characteristics.
Assuming the optimial situation. Simple queries can easily return (independently) all the records (rows) with the Names and the data based only on the first character /Field/Colimn([Not] IsNumeric(...).
Given the set of values which represent the names, add a Field (column) to hold the name values to the recordset. Note that the actual column to use for this may need to be determined dynamically, depending on the regularity of the data.
Insert the name value in the [NewName] column of each Name record.
Starting at the "top", get the name from the [NewName]column and loop till the row is at the end of the record set (last (empty?) row, replacing the [NewName] value whenever the column:row is not empty.
Start all over again at the top, deleting all records (rows) which are "name: records (rows). Note: These should be DELETED, not just erased or emptied.
close the spreadsheet
Use transfer text to import the cleansed spreadsheet.
Of course, this is somewhat incomplete (crude?), as it is -at best- a loose description of a process, Totally ignoring even pseudo code and the nicities of opening and closing instnaces of applications (or even which app this is written in). Perhaps, given a reasonable sample of realistic data a routine to fully automate the thought could be done in a few hours
MichaelRed