我有一个不相关的分类问题的数据集我要实现,我想减少属性总数。我把我的数据集放到了一个非常好处理的CSV格式,但是我需要做一些更改 - 而且我从来没有做过任何VBA,所以语法对我来说似乎非常陌生。
基本上,我有7071列(属性)和70行(实例)。每列下面的单元格(比如A列的A75)包含用于属性评估的特定统计方法。 我想要做什么检查此单元格中的值(本例中为“A75”),如果低于某个阈值,则删除整个列并将所有内容移至左侧。所以,如果我有类似的东西:
o A B C D ... XYZ
1 2 5 4 9 ... 2
2 3 9 0 1 ... 3
3 1 1 5 6 ... 0
...
75 0.23 0.5 0.6 0.44 ... 0.8
我的计算确定最小阈值为0.3,然后宏将摆脱A列并将其他值移到左侧:
o A B C ... XYZ
1 5 4 9 ... 2
2 9 0 1 ... 3
3 1 5 6 ... 0
...
75 0.5 0.6 0.44 ... 0.8
任何帮助都将非常感谢。
答案 0 :(得分:3)
这应该为你做。如果删除行或列,则从末尾开始删除并移至开头(即从右到左或从下到上)。
Option Explicit
Sub RemoveColumns()
Dim vEvalRange As Variant, ii As Integer
'NOTE: This assumes the usedrange starts at cell A1!
'Screen updating when deleting cells slows things down
Application.ScreenUpdating = False
'Set your evaluation row to an array. It's faster to sort through variables than sheet ranges
vEvalRange = ActiveSheet.Range(ActiveSheet.Cells(ActiveSheet.UsedRange.Rows.Count, 1), ActiveSheet.Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count)).Value
'count from right to left otherwise your columns will shift and mess up your array
For ii = UBound(vEvalRange, 2) To LBound(vEvalRange, 2) Step -1
If vEvalRange(1, ii) < 0.3 Then
ActiveSheet.Columns(ii).Delete
End If
Next ii
Application.ScreenUpdating = True
End Sub