我有一个代码,其中某些列中包含空白单元格。我希望能够选择仅空白单元格的未知长度(偏移2列)。我目前有多个if语句,它们是根据多少个空格过滤的,但是可变数目的空格可能会使它变得太复杂了。
示例: 当它遇到这两个空白(6和7)时,我想将这些行(6和7)的内容(在右边的两列)连接起来,然后粘贴在修订/注释/上面的单元格和右边的一列中空格(然后删除修订/注释行,因此在这里删除6和7)。我已经找出了这部分,如图1至2所示。
这些空白单元格始终随机出现并且长度可变,有时没有修订/注释,有时两行,五行,等等...
因此,我寻找的代码不是可以选择多少可变长度的空白单元格,而是将所有信息都转移到一个单元格(直接在右边的那个单元格)中,而不是拥有用于修订/注释多少行的许多if语句。原始信息行)。
到目前为止,这是我的代码中执行此操作的部分:
Sub BlankCell()
'Delete all header rows (except top row)
Dim i, LastRow As Integer
i = 2
LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
Do While i <= LastRow
If Cells(i, 2).Value = "Line" Then
Rows(i).EntireRow.Delete
End If
i = i + 1
Loop
'Select first cell
Range("C2").Select
'Loop through column C to find empty cells
'Copy and paste column E contents (concatenated) to column F and delete row(s) of clarifications
Do While Not IsEmpty("C")
'If there are three rows of comments
If IsEmpty(ActiveCell.Offset(1, 0)) And IsEmpty(ActiveCell.Offset(2, 0)) Then
Range(ActiveCell.Offset(0, 2), Range(ActiveCell.Offset(1, 2), ActiveCell.Offset(2, 2))).Select
ActiveCell.Offset(-1, 1) = ActiveCell.Offset(0, 0).Value & Chr(10) & ActiveCell.Offset(1, 0).Value & Chr(10) & ActiveCell.Offset(2, 0).Value
Selection.EntireRow.Delete
'If there are two rows of comments
ElseIf IsEmpty(ActiveCell.Offset(1, 0)) Then
Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(1, 2)).Select
ActiveCell.Offset(-1, 1) = ActiveCell.Offset(0, 0).Value & Chr(10) & ActiveCell.Offset(1, 0).Value
Selection.EntireRow.Delete
'If there is one row of comments
Else
ActiveCell.Offset(0, 2).Select
ActiveCell.Offset(-1, 1) = ActiveCell.Offset(0, 0).Value
Selection.EntireRow.Delete
End If
'Find next blank in column C
NextBlank = Range("C1:C" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
Range("C" & NextBlank).Select
'Exit loop once to the end of the table
If IsEmpty(ActiveCell.Offset(0, -1)) And IsEmpty(ActiveCell.Offset(1, -1)) Then
Exit Do
End If
Loop
End Sub
谢谢!
答案 0 :(得分:0)
尝试一下。图片显示了前后,因此您可以检查它是否正确。您可能需要调整详细信息以进行精确设置。
这将使用SpecialCells循环遍历空白区域并连接相应的单元格,然后再删除Area(一个连续的空单元格块)。
Sub BlankCell()
Dim j As Long, s As String, r As Range
With Columns("C").SpecialCells(xlCellTypeBlanks)
For j = .Areas.Count To 1 Step -1
For Each r In .Areas(j)
s = s & r.Offset(, 1) & vblf
Next r
.Areas(j)(1).Offset(-1, 2) = Trim(s)
s = vbNullString
.Areas(j).EntireRow.Delete
Next j
End With
End Sub
之前
之后