【问题标题】:Deleting the rows that are only one line which is the header删除只有一行的行,即标题
【发布时间】:2023-02-21 05:10:28
【问题描述】:

我想删除只有一行是标题的行,然后剩下的行有 2 个空格。

Sub deletehead()

    Dim LastRow As Long
    Dim i As Long

    LastRow = Cells(Rows.Count, "E").End(xlUp).Row
    Set wshh = Worksheets("Nenuco")
    i = LastRow
    For i = LastRow To 1
        
        If Not IsNumeric(Range("E" & i).Value) Then
            Rows(i).EntireRow.Delete
            Selection.End(xlUp).Select
        
        Else
            Selection.End(xlUp).Select
            Selection.End(xlUp).Select

        End If
        i = ActiveCell.Select
    Next
End Sub

我想选择 E 列的最后一行数字,看看是否有数字。
如果没有数字,请删除该行并转到下一个非空白单元格,这将是上面的表格。
如果有一个数字不删除它并去 2 次 xlup 位于上表中。 这样做直到第 1 行。

我想删除第 1 行和第 13 行

【问题讨论】:

  • 你能分享你的代码吗,到目前为止你尝试了什么
  • “线”是什么意思?您的意思是要删除列为空白的行吗?
  • 谢谢你的回答!我的意思是我想删除只有标题的行,所以只保留下面有信息的行的标题
  • 所有标题行都一样吗?
  • 结构是的,但它可以改变行,因为我也想在其他工作表中这样做

标签: excel vba


【解决方案1】:

如果这些假设不正确,解决方案可能需要修改,尽管它确实适用于您的示例以删除第 1 行和第 13 行。

  • 第一行的前四列始终是标题
  • 标题在整个表格中都是一样的

您的问题可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中提供的 Power Query 解决

使用 Power Query

  • 选择数据表中的所有行和列
  • Data => Get&Transform => from Table/Rangefrom within sheet
    • 务必取消选择my table has headers复选框
  • 当 PQ 编辑器打开时:Home => Advanced Editor
  • 记下表格姓名在 2 号线
  • 粘贴下面的 M 代码代替您看到的内容
  • 将第 2 行中的表名称更改回最初生成的名称。
  • 阅读cmets并探索Applied Steps以了解算法

M代码

let

//change next line to reflect actual data source
    Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],

//First row, first four columns, should always be a header row
    Headers = Record.RemoveFields(Source{0}, List.Last(Table.ColumnNames(Source))),
    
//Remove Header rows if blank below
//Generate a list of Records (rows) to be retained
    #"Retained Records" =  List.RemoveNulls(
        List.Generate(
            ()=>[rr=if List.NonNullCount(Record.FieldValues(Source{1})) = 0 then 0 else null, idx=0],
            each [idx] < Table.RowCount(Source),
            each [rr=if Record.RemoveFields(Source{[idx]+1}, List.Last(Table.ColumnNames(Source))) = Headers and   
                        List.NonNullCount(Record.FieldValues(Source{[idx]+2})) = 0 then [idx]+1 else null, idx=[idx]+1],
            each if [rr]=null then Source{[idx]} else null)),

//Generate resulting table
    #"Headers Removed" = Table.FromRecords(#"Retained Records")
in
    #"Headers Removed"

请注意,可以使用 Excel 的内置 Advanced Filter 解决此问题,并使用公式作为条件,使用相同的算法检查某行是否为标题行且下一行是否为空白。

  • 假设如上
  • 31 行制作标题(如上图所示)
  • 数据在A32:E48
  • 条件范围A24:A25
  • 条件公式=AND(NOT((A32:D32=$A$32:$D$32)*(A33:D33="")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多