我正在为Excel编写一个宏,它将合并包含标题的列“A”中的单元格,并在其下面显示空白单元格。
这是我正在处理的一个例子:Actual Before
以下是所需的结果:Actual After
到目前为止,我已经设法让我的代码工作,但我注意到它总是会跳过“防病毒”部分。
这是我到目前为止所得到的:
'loop to merge titles with blank cells and add borders
LR = Sheets(DataSheet).Cells(Rows.Count, "B").End(xlUp).Row
For i = 1 To LR
If Sheets(DataSheet).Cells(i, 1).Value <> "" And Sheets(DataSheet).Cells(i + 1, 1).Value = "" And Sheets(DataSheet).Cells(i + 1, 2).Value <> "" Then
u = i + 1
Do While Sheets(DataSheet).Cells(u, 1).Value = "" And Sheets(DataSheet).Cells(u, 2) <> ""
u = u + 1
Loop
Sheets(DataSheet).Range("A" & i & ":A" & (u - 1)).Select
With Selection
.Merge
.BorderAround Weight:=xlMedium
.WrapText = True
'.VerticalAlignment = x1VAlignTop
'.HorizontalAlignment = xlLeft
End With
Sheets(DataSheet).Range("B" & i & ":B" & (u - 1)).BorderAround Weight:=xlMedium
i = u + 1
End If
If Sheets(DataSheet).Cells(i, 1).Value <> "" Then
Sheets(DataSheet).Cells(i, 1).BorderAround Weight:=xlMedium
Sheets(DataSheet).Cells(i, 1).WrapText = True
Sheets(DataSheet).Cells(i, 2).BorderAround Weight:=xlMedium
Sheets(DataSheet).Cells(i, 2).WrapText = True
End If
Next i
请原谅我的代码有任何不妥之处,我对此非常陌生。我不知道我错过了什么,但任何帮助将不胜感激! 感谢
答案 0 :(得分:0)
看一下你的初始If语句,如下:
If Sheets(DataSheet).Cells(i, 1).Value <> "" And Sheets(DataSheet).Cells(i + 1, 1).Value = "" And Sheets(DataSheet).Cells(i + 1, 2).Value <> "" Then
在英语中,这表示“如果当前行不是空白,而下一行是空白,而第3行不是空白,那么......”
但是你可以看到A55和A55的细胞。 A54是空白的,在A54之后写着“Anti-Virus”。所以,你没有通过自己设定的测试,它忽略了这一部分。如果您希望它适用于此部分,则需要对其进行编码以实际计算连续非空单元格后连续的空白单元格数。这将告诉你合并多少。
答案 1 :(得分:0)
我终于明白了! 两个“if”语句都适用于某些部分,当它们应该是独占的时,所以我将第二个“if”语句更改为“else”。我还发现,当我设置“i = u”时,我忘了考虑“下一个”会比我需要的时间增加“i”,所以我将其改为“i = u - 1”来补偿。
以下是代码:
'This is the section that I'm having trouble with!
'loop to merge titles with blank cells and add borders
LR = Sheets(DataSheet).Cells(Rows.Count, "B").End(xlUp).Row
For i = 1 To LR
If Sheets(DataSheet).Cells(i, 1).Value <> "" And Sheets(DataSheet).Cells(i + 1, 1).Value = "" And i <> LR Then
u = i + 1
Do While Sheets(DataSheet).Cells(u, 1).Value = "" And Sheets(DataSheet).Cells(u, 2) <> ""
u = u + 1
Loop
Sheets(DataSheet).Range("A" & i & ":A" & (u - 1)).Select
With Selection
.Merge
.BorderAround Weight:=xlMedium
.WrapText = True
'.VerticalAlignment = x1VAlignTop
'.HorizontalAlignment = xlLeft
End With
Sheets(DataSheet).Range("B" & i & ":B" & (u - 1)).BorderAround Weight:=xlMedium
i = u - 1
Else
Sheets(DataSheet).Cells(i, 1).BorderAround Weight:=xlMedium
Sheets(DataSheet).Cells(i, 1).WrapText = True
Sheets(DataSheet).Cells(i, 2).BorderAround Weight:=xlMedium
Sheets(DataSheet).Cells(i, 2).WrapText = True
End If
Next i