我知道如何在Excel中编写公式,并且我仅在Excel中编写了几个基本宏来格式化单元格数据。我刚刚完成了将大量数据导出到Excel的操作,但是我只知道其中的一些数据是相关的,因此我想编写一个宏,该宏将遍历每列(1500+),对于每列,请检查是否在至少X%的行(100k +)具有一个值(而不是等于“ null” 的字符串。
老实说,我什至不知道从哪里开始。任何帮助表示赞赏。
答案 0 :(得分:3)
使用具有以下公式的帮助列:
=COUNTA(A2:D2)-COUNTIF(A2:D2,"null")
这将告诉您在任何给定行中有多少个单元格的内容不是"null"
然后您可以在该列上进行过滤
注意:我的示例假设A
至D
列中的数据,您需要针对数据进行调整。
答案 1 :(得分:1)
该代码认为有效范围是从第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