vba 如何判断两个合并单元格是否相邻?

您所在的位置:网站首页 vba判断单元格的值 vba 如何判断两个合并单元格是否相邻?

vba 如何判断两个合并单元格是否相邻?

2023-03-25 00:42| 来源: 网络整理| 查看: 265

这个事情,首先得定义一下:何为相邻

我先下一个定义吧,不然没法写代码:

当合并单元格 A 中的任意一个单元格与合并单元格 B 中的任意一个单元格相邻,则判定为 A 和 B 相邻。

例如下图:

基于上面这个定义:

单元格【一】、【二】不相邻单元格【一】、【三】相邻单元格【一】、【四】不相邻单元格【一】、【五】不相邻单元格【二】、【三】相邻单元格【二】、【四】不相邻单元格【二】、【五】相邻单元格【三】、【四】相邻单元格【三】、【五】相邻单元格【四】、【五】相邻(因为D7和C7相邻)

然后就可以写代码了,定义一个函数IsMergedAreaAdjacent:

' 函数名:IsMergedAreaAdjacent ' 功能:判断两个合并单元格区域是否相邻 ' 参数: ' - cell1: Range,要判断的第一个合并单元格 ' - cell2: Range,要判断的第二个合并单元格 ' 返回值:Boolean,如果两个区域相邻,返回 True,否则返回 False Function IsMergedAreaAdjacent(cell1 As Range, cell2 As Range) As Boolean Dim i As Long, j As Long ' 定义变量 i 和 j 用来循环遍历单元格 ' 两个参数都必须是合并单元格 If cell1.MergeCells And cell2.MergeCells Then ' 循环判断 cell1 中每个单元格是否和 cell2 相邻 For i = 1 To cell1.MergeArea.Cells.Count For j = 1 To cell2.MergeArea.Cells.Count ' 如果 cell1 和 cell2 中任意两个单元格相邻,则返回 True ' 相邻的定义是:两个单元格的行或列之差等于 1,而另一个维度是相等的 If (Abs(cell1.MergeArea.Cells(i).Row - cell2.MergeArea.Cells(j).Row) = 1 And cell1.MergeArea.Cells(i).Column = cell2.MergeArea.Cells(j).Column) Or _ (Abs(cell1.MergeArea.Cells(i).Column - cell2.MergeArea.Cells(j).Column) = 1 And cell1.MergeArea.Cells(i).Row = cell2.MergeArea.Cells(j).Row) Then ' 任意一个单元格相邻即可返回 True,并结束函数执行 IsMergedAreaAdjacent = True Exit Function End If Next Next End If ' 如果两个区域不相邻或者不是合并单元格,则返回 False IsMergedAreaAdjacent = False End Function

定义好一个函数,最好也做一下测试,确保按你的设计跑出正确的结果:

Sub TestIsMergedAreaAdjacent() Dim cell1 As Range Dim cell2 As Range Set cell1 = Range("B1"): Set cell2 = Range("A4") Debug.Print "单元格【一】、【二】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("B1"): Set cell2 = Range("B4") Debug.Print "单元格【一】、【三】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("B1"): Set cell2 = Range("D4") Debug.Print "单元格【一】、【四】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("B1"): Set cell2 = Range("A7") Debug.Print "单元格【一】、【五】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("B4"): Set cell2 = Range("A4") Debug.Print "单元格【二】、【三】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("A4"): Set cell2 = Range("D4") Debug.Print "单元格【二】、【四】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("A7"): Set cell2 = Range("A4") Debug.Print "单元格【二】、【五】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("B4"): Set cell2 = Range("D4") Debug.Print "单元格【三】、【四】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("B4"): Set cell2 = Range("A7") Debug.Print "单元格【三】、【五】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") Set cell1 = Range("A7"): Set cell2 = Range("D4") Debug.Print "单元格【四】、【五】" & IIf(IsMergedAreaAdjacent(cell1, cell2), "相邻", "不相邻") End Sub

我测试过了,是可以通过的:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3