代码之家  ›  专栏  ›  技术社区  ›  technomalogical

Excel宏从稀疏填充的工作表生成SQL?

  •  1
  • technomalogical  · 技术社区  · 14 年前

    A        B        C        D        E        F        G
    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,用于填充中A列中的数据 Table_1 ,中的B列和C列 Table_2 (外键引用来自 Table_3 (外键引用来自 表2 ). SQL可以放在单独的工作表、文本文件和剪贴板中——几乎可以放在任何地方。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Michael    14 年前

    这是一个相当初级的示例,取决于您的数据的布局与您上面描述的完全相同。(您可以将其更改为pass originCell 如果需要,可以将其作为参数,或者在故障排除/实现时手动更改该值。)

    它所做的只是获取原始单元格的行值,并在a列中创建一个具有相同行号的新范围。然后它只看上面的单元格,检查它是否为空。如果为空,则将范围上移一行,直到找到填充的单元格。我已将发现的价值存入银行 parentCell 在I3中,显然你可以把它放在任何你想放的地方,只是为了验证它是否找到了正确的值。

    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
    

    这将是许多解决方案的良好起点。除了将originCell作为参数传递外,还可以传递要使用以下形式查找的Table_2值的列号:

    Sub findParent(originCell as Range, parentColumn as long)
    
        2
  •  0
  •   Lance Roberts    14 年前