VBA使用if语句和for循环来合并某些单元格

我试图让这段代码说:“如果第3列(C)中的单元格=单词”高“或”中间“,然后将第4列(D)中的匹配单元格与其下面的单元格合并并居中。 ,现在我的反应方式是通过合并到底部,因为.End(xlDown)。我不知道如何解决这个问题,这里是一个数据样本,我希望它看起来如何:

例题

这是我一直在使用的VBA代码:

Sub Merge_Priority2() Dim RgToMerge As String For i = 1 To ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row RgToMerge = "" If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then RgToMerge = "$D$" & Cells(i, 4).End(xlDown).Row & ":$D$" & i With Range(RgToMerge) .Merge .HorizontalAlignment = xlCenterAcrossSelection .VerticalAlignment = xlCenter End With Else End If Next i End Sub 

我假设你使用.End(xlDown)为了select一行,但你可以摆脱(如@MattCremeensbuild议)。 然后,对于你的范围的第二部分,加1到i得到它只select一行,如下所示:

 RgToMerge = "$D$" & i & ":$D$" & i + 1 

对于第1行, RgToMerge将看起来像$D$1:$D$2 。 完整的Sub将如下所示:

 Sub Merge_Priority2() Dim RgToMerge As String For i = 1 To ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row RgToMerge = "" If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then RgToMerge = "$D$" & i & ":$D$" & i + 1 With Range(RgToMerge) .Merge .HorizontalAlignment = xlCenterAcrossSelection .VerticalAlignment = xlCenter End With Else End If Next i End Sub 

尝试只是基于你的行variables定义范围(i)

 Sub Merge_Priority2() Dim RgToMerge As Range For i = 1 To ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then Set RgToMerge = ActiveSheet.Range(Cells(i, 4), Cells(i + 1, 4)) With RgToMerge .Merge .HorizontalAlignment = xlCenterAcrossSelection .VerticalAlignment = xlCenter End With Else End If Next i End Sub 

我稍微修改了你的代码。 我不觉得你太离谱了。

Sub Merge_Priority2()Dim RgToMerge As Range

 For i = 1 To ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then Set RgToMerge = Range(Cells(i, 3), Cells(i + 1, 3)) With RgToMerge .Merge .HorizontalAlignment = xlCenterAcrossSelection .VerticalAlignment = xlCenter End With Else End If Next i 

我假设有关的数据在C列