达到 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