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

Posted

技术标签:

【中文标题】访问 VBA 以拆分 Excel 中的所有合并单元格【英文标题】:Access VBA to split out ALL merged cell in 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跨度> 【参考方案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) " 的目的是什么?

以上是关于访问 VBA 以拆分 Excel 中的所有合并单元格的主要内容,如果未能解决你的问题,请参考以下文章

单元格中的 Excel VBA 换行会减慢合并任务的执行速度

基于固定宽度的单元格中 MID/拆分文本的 Excel VBA 代码

从 vba 中的单元格地址获取 excel 合并单元格的值

使用 MergeArea 检测 VBA Excel 中的合并单元格

excel表格中单元格不能拆分只能合并对吗?

在excel中,修改单元格数据的方法有几种?