访问 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 代码