如何将具有数据的单元格与同一列中的空白单元格合并?

我正在为Excel编写一个macros,它将合并列“A”中的单元格,其中包含标题下的空白单元格。

这是我正在处理的一个例子: 实际之前

这是所需的结果: 实际之后

到目前为止,我已经设法让我的代码工作,但我注意到它总是跳过“防病毒”部分。

这是我到目前为止:

'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 

请原谅我的代码的任何sloppiness,我很新这个。 我不知道我错过了什么,但任何帮助将不胜感激! 谢谢

看看你的初始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 

用英文说:“如果当前行不是空白的,下一行是空白的,第三行不是空白的,那么……”

但是你可以看到A55和A56单元都是空白的,在A54之后是“Anti-Virus”。 所以,你没有为自己设定的testing,而忽略了这一部分。 如果您希望它适用于本节,则需要对其进行编码以实际计算一行中有多less个空白单元格,然后是非空白单元格。 这将告诉你有多less合并在一起。

我终于想通了! 这两个“if”语句在某些部分都是独占的,所以我把第二个“if”语句改成了“else”。 我还发现,当我设置“我=你”时,我忘了考虑到“下一个”我会比我需要的时间增加一次,所以我把它改为“我=你 – 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