Excel 通过合并单元格和边框进行循环“;“向下”;

Excel 通过合并单元格和边框进行循环“;“向下”;,excel,vba,Excel,Vba,这些是我的合并单元 我想在这些合并单元格中循环,找到每个合并单元格的结尾,然后在左侧用点(xlDots)包围直到行6 这将是我的输出 这是我到现在为止一直在尝试的 Dim rng As Range Set rng = Range("A1:I6") With rng.Borders .LineStyle = xlDot .Weight = xlThin End With 但是它包围了我的每一个单元格,我能给出一个类似于for循环的步骤2吗?作为替代,你不需要VBA。您可以

这些是我的合并单元

我想在这些合并单元格中循环,找到每个合并单元格的结尾,然后在左侧用点(xlDots)包围直到行6

这将是我的输出

这是我到现在为止一直在尝试的

Dim rng As Range

Set rng = Range("A1:I6")

With rng.Borders
    .LineStyle = xlDot
    .Weight = xlThin
End With

但是它包围了我的每一个单元格,我能给出一个类似于for循环的步骤2吗?

作为替代,你不需要VBA。您可以使用条件格式:

规则:


当然,只要根据需要选择格式。

我的建议是基于一个已知的技巧

  • 通过使用从属于合并区域的所有单元格中创建范围。我使用了索引(分别为2和4)的组合,但如果值是公式的结果,则可以将其更改为-4123和4

  • 我确保这些单元格是从第3行开始的a的一部分

  • 然后简单地按1行和该范围对象,直到第6行和合并区域的实际宽度(使用Columns.Count),因为您可能无法100%确定这些合并区域的列的宽度

  • 您可以将
    xlEdgeLeft
    边框的线型设置为
    xlDot



显然,如果您的合并单元格范围只涉及A-I列,它将变得简单得多,而这个解决方案在这个意义上更具动态性。

这里是@JvdV answer的变体

For Each cel In ThisWorkbook.Sheets("Sheet1").Range("A3:M3") 'change sheet as needed
    If cel.MergeCells = True Then
        With cel.MergeArea.Offset(1).Resize(3).Borders(xlEdgeLeft)
            .LineStyle = xlDash
        End With
    End If
Next cel

你能告诉我们到目前为止你都做了些什么吗?编辑您的问题以包含您的代码。请查看,不要忘记阅读和编辑。另外,请查看,还有更多的好信息,我不会和你讨论为什么你要否决投票,因为我没有真正阅读所有这些内容,我认为人们可以“在否决投票之前说出来”,在这个问题上有些东西不起作用。但我只问了一个简单明了的问题,比如@MilesFett问“你能告诉我们你到目前为止都做了些什么吗?”我做到了,我的代码错了,但我还是这么做了。我投票反对VBA,但我不确定这些合并的单元格是否总是像OP提到的那样只有3宽:
“找到每个合并单元格的结尾”
是的,我通过条件格式实现了它,但我想通过VBA学习它,因为我在制作宏,我知道你会回答!永远完美啊!jvdV你是大师!哈,绝对不是大师和完美。只是喜欢解决问题。很高兴这解决了你的问题。享受。=)事实上,“ChangeWorld”,如果您总是只对<代码>范围(“A3:M3”)/ <代码>感兴趣,这可能是一个更快的例程。@ Gmalc,您可能需要考虑指定工作表,否则更短的例程比Mig + 1:)JVDV,通常这样做,但只想显示我正在玩的变体,我很高兴地注意到我们在同一条轨道上。根据@JvdV建议更新
=$C$4:$I$6
Sub Test()

Dim rng As Range, cl As Range
With Sheet1 'Change appropriately
    Set rng = Intersect(.Cells.SpecialCells(2), .Cells.SpecialCells(4))
    For Each cl In rng
        If cl.MergeArea.Row = 3 Then
            cl.MergeArea.Offset(1).Resize(3, cl.MergeArea.Columns.Count).Borders(xlEdgeLeft).LineStyle = xlDot
        End If
    Next cl
End With

End Sub
For Each cel In ThisWorkbook.Sheets("Sheet1").Range("A3:M3") 'change sheet as needed
    If cel.MergeCells = True Then
        With cel.MergeArea.Offset(1).Resize(3).Borders(xlEdgeLeft)
            .LineStyle = xlDash
        End With
    End If
Next cel