Excelmacros从稀疏填充表生成SQL?

我有一个工作表,已稀疏填充数据,需要进入几个关系数据库表。 该表看起来像这样:

ABCDEFG Table_1 Table_2 Table_2 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_2 Table_2 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_2 Table_2 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_1 Table_2 Table_2 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_2 Table_2 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_2 Table_2 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 Table_3 

给定这个数据,我将生成SQL,它将填充Table_1中的列A, Table_1中的列B和C(带有来自Table_1的值的外键引用)以及Table_1列D,E和F(带有外键引用Table_2的值)。 SQL可以放在一个单独的工作表,一个文本文件,剪贴板 – 几乎任何地方。

如有必要,我可以操纵表格(填写数值,重新排列数据,不pipe),但宁愿避免这个手动步骤。 我希望的是,有一些Excel / VBAmacros,我可以通过源范围(或工作表),然后每个表的子范围,并让macros知道如何find引用回父表。

这是一个非常简单的例子,它依赖于你的数据完全按照你上面描述的方式进行布局。 (如果需要,可以更改此参数以将originCell作为parameter passing,或者只是在排除故障/执行时手动更改值。)

它所做的就是取原始单元格的行值,并使用相同的行号在列A中创build一个新的范围。 然后它只是看上面的单元格,并检查它是否是空白的。 如果它是空的,则将范围向上移动一行,直到find填充的单元格。 我已经将find的parentCell的值存入I3,显然你可以把它放在你想要的任何地方,只是为了validation它find了正确的值。

 Sub findParent() Dim originCell As Range, parentCell As Range Set originCell = Sheet1.Range("E3") Set parentCell = Sheet1.Cells(originCell.Row, 1) While IsEmpty(parentCell) = True Set parentCell = parentCell.Offset(-1, 0) Wend Sheet1.Range("I3").Value = parentCell.Value End Sub 

这将成为任何数量解决scheme的良好起点。 除了传入originCell作为参数之外,还可以使用如下forms传递要查找的Table_2值的列号:

 Sub findParent(originCell as Range, parentColumn as long) 

你可以为头文件(或者整个范围,如果它是静态的)创build命名范围,并且使用embedded了表名的文本string,然后在代码中parsing出来。