达到 Excel 要求列的最佳方法
The best way to achieve the requirement column in Excel
根据所附的屏幕截图,从样本数据中实现要求的最佳方法是什么?我想将红色突出显示的字体合并为一行并删除其他行。示例 - 第 4、6 和 8 行中的数据可以移动到上一列,然后应该完全删除 4、6 和 8 行。
注意:数据不一致 B4、C6、A8等ROWS之间数据不一致的可能性很大。
删除符合条件的整行
- 从底部到顶部循环遍历行。
- 如果至少有一个空白单元格,returns 与每个 non-blank 单元格顶部相邻的每个单元格的值,与 non-blank 单元格的值连接,在相邻的单元格中。然后它将行的第一个单元格组合成一个范围。
- 删除组合区域的整行。
Option Explicit
Sub ConcatMissing()
Const SecondDataRowFirstCellAddress As String = "A4"
Const Delimiter As String = ""
Dim ws As Worksheet: Set ws = ActiveSheet
Dim fCell As Range: Set fCell = ws.Range(SecondDataRowFirstCellAddress)
Dim rg As Range
With fCell.CurrentRegion
Set rg = fCell.Resize(.Row + .Rows.Count _
- fCell.Row, .Column + .Columns.Count - fCell.Column)
End With
Dim cCount As Long: cCount = rg.Columns.Count
Dim rrg As Range
Dim rCell As Range
Dim drg As Range
Dim SkipRow As Boolean
Dim r As Long
For r = rg.Rows.Count To 1 Step -1
Set rrg = rg.Rows(r)
If Application.CountBlank(rrg) > 0 Then
For Each rCell In rrg.Cells
If Len(CStr(rCell.Value)) > 0 Then
rCell.Offset(-1).Value = CStr(rCell.Offset(-1).Value) _
& Delimiter & CStr(rCell.Value)
End If
Next rCell
If drg Is Nothing Then
Set drg = rrg.Cells(1)
Else
Set drg = Union(drg, rrg.Cells(1))
End If
End If
Next r
If drg Is Nothing Then Exit Sub
drg.EntireRow.Delete
End Sub
根据所附的屏幕截图,从样本数据中实现要求的最佳方法是什么?我想将红色突出显示的字体合并为一行并删除其他行。示例 - 第 4、6 和 8 行中的数据可以移动到上一列,然后应该完全删除 4、6 和 8 行。
注意:数据不一致 B4、C6、A8等ROWS之间数据不一致的可能性很大。
删除符合条件的整行
- 从底部到顶部循环遍历行。
- 如果至少有一个空白单元格,returns 与每个 non-blank 单元格顶部相邻的每个单元格的值,与 non-blank 单元格的值连接,在相邻的单元格中。然后它将行的第一个单元格组合成一个范围。
- 删除组合区域的整行。
Option Explicit
Sub ConcatMissing()
Const SecondDataRowFirstCellAddress As String = "A4"
Const Delimiter As String = ""
Dim ws As Worksheet: Set ws = ActiveSheet
Dim fCell As Range: Set fCell = ws.Range(SecondDataRowFirstCellAddress)
Dim rg As Range
With fCell.CurrentRegion
Set rg = fCell.Resize(.Row + .Rows.Count _
- fCell.Row, .Column + .Columns.Count - fCell.Column)
End With
Dim cCount As Long: cCount = rg.Columns.Count
Dim rrg As Range
Dim rCell As Range
Dim drg As Range
Dim SkipRow As Boolean
Dim r As Long
For r = rg.Rows.Count To 1 Step -1
Set rrg = rg.Rows(r)
If Application.CountBlank(rrg) > 0 Then
For Each rCell In rrg.Cells
If Len(CStr(rCell.Value)) > 0 Then
rCell.Offset(-1).Value = CStr(rCell.Offset(-1).Value) _
& Delimiter & CStr(rCell.Value)
End If
Next rCell
If drg Is Nothing Then
Set drg = rrg.Cells(1)
Else
Set drg = Union(drg, rrg.Cells(1))
End If
End If
Next r
If drg Is Nothing Then Exit Sub
drg.EntireRow.Delete
End Sub