代码之家  ›  专栏  ›  技术社区  ›  Uchiha Itachi

Excel VBA-如何删除行数小于X%的列的值[已关闭]

  •  -5
  • Uchiha Itachi  · 技术社区  · 6 年前

    我知道如何在Excel中编写公式,而且我只在Excel中编写了几个基本宏来格式化单元格数据。我刚刚在Excel中完成了一个相当大的数据导出,但我知道其中只有一部分是相关的,所以我想编写一个宏,查看每一列(1500+),并检查每一列中是否有至少X%的行(100k+)具有值(并且不是等于的字符串) “空” .

    我真的不知道从哪里开始。感谢您的帮助。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Jchang43    6 年前

    代码将有效范围视为从第1行到列中最低的非空单元格。公平警告:它当前未经测试,因此请先在具有已知结果的虚拟版本上尝试。你必须改变常数 TargetPercent 匹配您想要的任何X%。由于它使用的是工作表函数,所以这可能会非常慢,但我认为它仍然比手工操作快。我相信这也会删除任何空白栏

    还值得注意的是,在for循环中,从右向左很重要,这样在删除列时不会意外地弄乱索引。

    Option Explicit
    
    Sub test()
    Const TargetPercent = 0.5
    Dim nullcells As Long
    Dim blankcells As Long
    Dim i As Long
    Dim lastrow As Long
    Dim lastcol
    
    lastcol = ActiveSheet.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
    For i = lastcol To 1 Step -1
        lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, i).End(xlUp).row
        nullcells = Application.CountIf(ActiveSheet.Columns(i), "null")
        blankcells = Application.CountBlank(ActiveSheet.Range(Cells(1, i), Cells(lastrow, i)))
        If (lastrow - nullcells - blankcells) / lastrow < TargetPercent Then
            Columns(i).Delete (xlShiftToLeft)
        End If
    Next i
    End Sub
    
        2
  •  3
  •   cybernetic.nomad    6 年前

    =COUNTA(A2:D2)-COUNTIF(A2:D2,"null")
    

    "null" 在任何给定行中

    然后可以对该列进行筛选

    A D ,您需要根据您的数据进行调整。