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出来。