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列