【问题标题】:Access VBA to split out ALL merged cell in Excel访问 VBA 以拆分 Excel 中的所有合并单元格
【发布时间】:2013-07-18 10:04:00
【问题描述】:

我需要将一些 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 可以留空,所以我不能使用条件检查,如果它为空然后查找上面的数据。

【问题讨论】:

  • 如果你想在没有宏的情况下进行取消合并(或者你可以准备一个,假设你已经构建了导入宏)你可以选择你的数据取消合并并使用这里使用的这个魔法HERE跨度>

标签: vba ms-access excel ms-access-2007


【解决方案1】:

试试这个

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) " 的目的是什么?
猜你喜欢
  • 2021-05-10
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多