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

zir*_*ael 32 excel merge vba excel-vba

我遇到了这个问题 - 我必须从excel表中检测水平和垂直合并的单元格.我必须存储第一个细胞系,以及合并区域的长度.我逐行遍历表中两个for-cycles.

如何使用MergeArea属性检测合并和非合并区域?如果单元格未合并,则应该返回空范围,但是,这样:

"如果currentRange什么都没有"

根本不工作.有任何想法吗?非常感谢.

tbu*_*bur 96

这有几个有用的代码.

将光标放在合并的单元格中,并在Immidiate Window中询问这些问题:

activecell是一个合并的单元格吗?

? Activecell.Mergecells
 True
Run Code Online (Sandbox Code Playgroud)

合并了多少个单元格?

? Activecell.MergeArea.Cells.Count
 2
Run Code Online (Sandbox Code Playgroud)

合并了多少列?

? Activecell.MergeArea.Columns.Count
 2
Run Code Online (Sandbox Code Playgroud)

合并了多少行?

? Activecell.MergeArea.Rows.Count
  1
Run Code Online (Sandbox Code Playgroud)

合并范围地址是什么?

? activecell.MergeArea.Address
  $F$2:$F$3
Run Code Online (Sandbox Code Playgroud)

  • 根据[msdn](https://msdn.microsoft.com/en-us/library/office/ff822300(v = office.15).aspx)MergeArea属性返回范围对象本身,如果它不是**在合并区域.所以你应该能够使用MergeArea而不必先检查MergeCells.适用于我的代码. (4认同)

Dav*_*lfe 6

虽然使用 @tbur 所示的选定单元格可能很有用,但它也不是唯一可用的选项。

您可以像这样使用Range() :

If Worksheets("Sheet1").Range("A1").MergeCells Then
  Do something
Else
  Do something else
End If
Run Code Online (Sandbox Code Playgroud)

或者:

If Worksheets("Sheet1").Range("A1:C1").MergeCells Then
  Do something
Else
  Do something else
End If
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Cells()

If Worksheets("Sheet1").Cells(1, 1).MergeCells Then
  Do something
Else
  Do something else
End If
Run Code Online (Sandbox Code Playgroud)