访问VBA以拆分Excel中的所有合并单元格

访问VBA以拆分Excel中的所有合并单元格,vba,ms-access,excel,ms-access-2007,Vba,Ms Access,Excel,Ms Access 2007,我需要将一些Excel文件导入Access数据库。我知道如何在VBA中编写导入函数,但由于Excel中的某些合并单元格给我带来了麻烦,导入函数无法正常工作 例如,在Excel电子表格中 导入Access表时,它会逐行导入。所以第一行应该是1-pencil-90,这是正确的,但是由于合并了单元格,第二行和第三行是空的。 结果是 No|Product|Storage 1 | pencil|90 | |23 | |41 但预期结果应该是: No|Product|St

我需要将一些Excel文件导入Access数据库。我知道如何在VBA中编写导入函数,但由于Excel中的某些合并单元格给我带来了麻烦,导入函数无法正常工作

例如,在Excel电子表格中

导入Access表时,它会逐行导入。所以第一行应该是1-pencil-90,这是正确的,但是由于合并了单元格,第二行和第三行是空的。 结果是

No|Product|Storage
1 | pencil|90
  |       |23
  |       |41
但预期结果应该是:

No|Product|Storage
1 | pencil|90
1 | pencil|23
1 | pencil|41
< >我希望VBA对合并的单元格进行拆分,并用合并单元格中的信息填充空白数据。请记住,我有很多合并的单元格,手动更改是不可能的。我愿意接受任何有助于我实现理想结果的解决方案

p/S:aata可以保留为空,因此我不能使用条件检查。如果它为空,请查找上述数据。

试试这个

Sub UnMergeRanges()
    Dim cl As Range
    Dim rMerged As Range
    Dim v As Variant

    For Each cl In ActiveSheet.UsedRange
        If cl.MergeCells Then
            Set rMerged = cl.MergeArea
            v = rMerged.Cells(1, 1)
            rMerged.MergeCells = False
            rMerged = v
        End If
    Next
End Sub
工作原理:

  • 循环使用范围内的单元格
  • 如果单元格是合并范围的一部分
    • 将范围变量设置为合并范围
    • 将范围内左上角单元格的当前值记录到变量
      v
      中。这是合并范围显示的值
    • 解除射程
    • 将记录的值(
      v
      )写入当前未合并范围的所有单元格
试试这个

Sub UnMergeRanges()
    Dim cl As Range
    Dim rMerged As Range
    Dim v As Variant

    For Each cl In ActiveSheet.UsedRange
        If cl.MergeCells Then
            Set rMerged = cl.MergeArea
            v = rMerged.Cells(1, 1)
            rMerged.MergeCells = False
            rMerged = v
        End If
    Next
End Sub
工作原理:

  • 循环使用范围内的单元格
  • 如果单元格是合并范围的一部分
    • 将范围变量设置为合并范围
    • 将范围内左上角单元格的当前值记录到变量
      v
      中。这是合并范围显示的值
    • 解除射程
    • 将记录的值(
      v
      )写入当前未合并范围的所有单元格

我能问一下这行“v=rMerged.Cells(1,1)”的目的是什么吗?我能问一下这行“v=rMerged.Cells(1,1)”的目的是什么吗?如果您想在不使用宏的情况下取消合并(或者您可以准备一个,假设您已经构建了导入宏)如果您想在不使用宏的情况下进行解合并(或者您可以准备一个,假设您已经构建了导入宏),您可以选择数据解合并并使用此处使用的此魔术