【发布时间】:2020-01-28 17:52:57
【问题描述】:
我正在编写一个宏,除了做其他事情外,它还应该过滤一长列由正数和负数组成的数据。这些数字可以是任何值,不一定是介于 -4095 和 4095 之间的所有值,但整个列的长度会有所不同,最多超过 800,000 行。我想过滤掉列中的任何数字,即 -4095、1、2、3、4 或 4095。 手动执行此操作很容易使用过滤器选项并取消选中我想要遗漏的数字,但将其记录到宏会在大约 230 个数字后导致错误“行继续过多”。显然这是因为宏列出了它在列中留下的数字,而不是它删除的数字。我知道 25 条物理线路的限制,并且我应该在每行中添加更多数字,但是我怎样才能做到这一点而不必输入超过 8100 个不同的数字——大多数数字长,每个数字都用引号括起来,每个数字之间有一个逗号?这将带我永远! 我知道完成此过程的其他代码方法,但它们可能需要超过 45 分钟才能完成大文件。过滤过程要快得多,通常在大约 30 秒内完成,即使是大文件也是如此。我也尝试过其他过滤条件,但似乎没有其他方法。
Columns("C:C").Select
Selection.AutoFilter
ActiveSheet.Range("$C$4:$C$82784").AutoFilter Field := 1, Criteria1 := Array("0" _
,"-1","10","-10","100","-100","1000","-1000","1001","-1001","1002","-1002", _
"1003","-1003","1004","-1004","1005","-1005","1006","-1006","1007","-1007", _
"1008","-1008","1009","-1009","101","-101","1010","-1010","1011","-1011","1012" _
,"-1012","1013","-1013","1014","-1014","1015","-1015","1016","-1016","1017", _
"-1017","1018","-1018","1019","-1019","102","-102","1020","-1020","1021", _
"-1021","1022","-1022","1023","-1023","1024","-1024","1025","-1025","1026", _
"-1026","1027","-1027","1028","-1028","1029","-1029","103","-103","1030", _
"-1030","1031","-1031","1032","-1032","1033","-1033","1034","-1034","1035", _
"-1035","1036","-1036","1037","-1037","1038","-1038","1039","-1039","104", _
"-104","1040","-1040","1041","-1041","1042","-1042","1043","-1043","1044", _
"-1044","1045","-1045","1046","-1046","1047","-1047","1048","-1048","1049", _
"-1049","105","-105","1050","-1050","1051","-1051","1052","-1052","1053", _
"-1053","1054","-1054","1055","-1055","1056","-1056","1057","-1057","1058", _
"-1058","1059","-1059","106","-106","1060","-1060","1061","-1061","1062", _
"-1062","1063","-1063","1064","-1064","1065","-1065","1066","-1066","1067", _
"-1067","1068","-1068","1069","-1069","107","-107","1070","-1070","1071", _
"-1071","1072","-1072","1073","-1073","1074","-1074","1075","-1075","1076", _
"-1076","1077","-1077","1078","-1078","1079","-1079","108","-108","1080", _
"-1080","1081","-1081","1082","-1082","1083","-1083","1084","-1084","1085", _
"-1085","1086","-1086","1087","-1087","1088","-1088","1089","-1089","109", _
"-109","1090","-1090","1091","-1091","1092","-1092","1093","-1093","1094", _
"-1094","1095","-1095","1096","-1096","1097","-1097","1098","-1098","1099", _
"-1099","11","-11","110","-110","1100","-1100","1101","-1101","1102","-1102", _
【问题讨论】:
-
也许帮助栏可以解决这个问题?将数据与您要排除的值匹配,而不是根据真或假过滤该列。
-
您的数字是否没有模式(除了使用相同的
-和+),您可能可以在公式/循环中生成? -
谢谢大家的建议。我尝试运行小循环公式和帮助列来解决这个问题。尽管它们取得了成功,但它们大大增加了处理时间。这些测试只是试图对 250 个数字而不是我需要的 8100 个数字进行排序。循环需要 45 多分钟才能完成,而过滤选项则在几秒钟内完成。我可能错了,但似乎任何通过逐个单元格向下逐列来解决问题的公式都会根据总行数产生巨大的时间延迟。
-
一旦助手中的公式就位,您想要手动计算或将单元格更改为值而不是公式。否则,它对您的处理过于繁重,将涉及数组公式(我假设)