excel宏命令(条件筛选)

Sub test()
Dim i, j, m As Integer
j = 2
For i = 1 To Worksheets(1).UsedRange.Rows.Count
If Worksheets(1).Cells(i, 1) = "你" Then
For m = 1 To 4
Worksheets(2).Cells(j, m) = Worksheets(1).Cells(i, m)
Next
j = j + 1
End If
Next
End Sub

你好,你输入的这个宏,我用了一下,但是总是差最后几条纪录,我在后面加多很多行。请问是为什么?

开发工具——宏——编辑宏——输入代码如下——运行宏,结果筛选出A列数据中的大于5的数值,如图:

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-20
如果是很多行的话,需要修改这个循环:

For m = 1 To n
Worksheets(2).Cells(j, m) = Worksheets(1).Cells(i, m)
Next
n表示一共有几行,如果是10行,则将10代替n就可以了追问

不是吧。n是表示要显示同一行的几列,我换过了,没什么改变。

我的意思是原始数据上加了很多。我还是可以理解整个宏命令的意思的,但就是找不出来

比如正确的结果是10行,但宏结果却是8行

而我原始数据后面继续添加纪录,比如正确的结果是20行,但宏结果却显示17行之类的,反正最后总是差几行。
如果你不明白我的意思,我可以发个表格给你看一下。看一下是出什么问题。

追答

发个表格给我,QQ:670868638

来自:求助得到的回答
第1个回答  2011-04-20
从“If Worksheets(1).Cells(i, 1) = "你" Then”
这句看,你的A列数据中,至少有二到三个单元格里不是“一个字符”“你”,你可检察一下,有没有多输入了空格之类的。追问

不会,我已经很详细地检查了一遍。而且我在后面加多几条纪录,再运行宏,前面的就出来了,只是后来加的没有出来。

而我新建了一个EXCEL文件,但这边的数据复制过去,把所有的空行都删除掉,还是用这个宏,却是正确的。

最后我得出一个结论,就是第一格(A1)或者说第一行必须有数据,即使后面有空行也不会出错,否则则会使得这个宏出错。但我不知道怎么在第一行没有数据的时候使它也变得正确,按逻辑来说应该没错的。

追答

呵呵,明白了,原来问题出在这里。你的代码中有一行“For i = 1 To Worksheets(1).UsedRange.Rows.Count”,它的意思是从第一行开始循环,一直到已用区域的行数。如果你第一行是空白,那么EXCEL在计算“已用区域的行数”时,就把第一行排除在外了。所以在数据区的第一行不要空。另外你也可以考虑用另外的计算行数的方法,比如“[65536].end(xlup).row”语句,就不会存在计数误差。

追问

这些语句我还是不懂,没学过宏。不过我始终觉得里面逻辑有点问题,就是看不出为什么?按照逻辑来说,第一行是空白的,其实并不影响后面的计算,而且它要不就全错我还可以理解,可就是统计出来总是差最后几条,有时一条,有时二条,有时三条。晕啊。
还不如我设计的自动函数。算了。宏确实比较复杂。

本回答被提问者采纳
第2个回答  2011-04-20
你这宏应该有冲突把,你的m取1会不会出问题阿,第一列不应该参与计算追问

不会,我原始数据如果有100行(100个纪录),我按条件筛选出来的,假如正确应该有20条纪录,但这条命令却只显示出了17条纪录

后来我把原始数据100行复制变其变成200行,我按条件筛出来的,应该是40条纪录,而这条命令却只显示出了37条纪录。

我估计程序不会出错,我还是可以理解整个命令的意思,不然它不会在我加大行数的情况下继续筛选。但我却找不到出错在哪?

第3个回答  2011-04-20
检查一下你的表格是否有空行。

Excel怎么筛选出符合条件的数据 Excel怎么启用宏
选择数据区域。点击右上角筛选按钮,选择列,设置条件。选择筛选方式(文本、数字或日期)和条件。查看并应用筛选结果。若条件复杂,可使用`IF`、`COUNTIF`等函数进行筛选。启用宏启用宏的步骤包括在安全警告中选择“启用内容”或设置信任中心以长期启用。务必注意安全风险,只在信任的文档中启用。设置Excel...

excel如何筛选指定范围内的数据?
1、电脑打开Excel表格。2、电脑打开Excel表格后,Alt+F11进入宏,然后点击插入模块。3、点击插入模块后,输入代码:Function SUMColor(rag1 As Range, rag2 As Range)Application.Volatile For Each i In rag2 If i.Interior.ColorIndex = rag1.Interior.ColorIndex Then SUMColor = SUMColor + 1 End...

excel筛选怎么用宏excel筛选怎么用
1、具体操作步骤如下:1.选中表格的第一行,在工具栏中选择“筛选”2.在需要筛选的那一列单元格中点击符号3.在弹出来的窗口中的“内容筛选”中填入筛选的条件。2、如在下列数字中想筛选出含有5的数字则在“内容筛选”空白处填写数字“5” 4.最后点击“确定”即可。

EXCEL表格中用宏命令隐藏有条件的空行?
点击任何一列中的筛选按钮,例如我们点击B列的筛选按钮,将【全选】选项勾选去掉,拉动右侧滑块将【空白】选项勾选上。所有的空白行就筛选出来了。然后选中空白行,一次性删除。然后再次点击第一行B列的筛选按钮,选择【全选】,点击【确定】即可。此方法比较简单。...3 ...第二种方法:定位法:选中...

Excel宏多条件筛选复制?
x = --Left(Cells(i, "b"), 2)If x = 21 And Cells(i, "O") > 10 Then y = Sheets(2).Range("A65536").End(xlUp).Row Sheets(2).Cells(y + 1, "A") = Cells(i, "g")End If Next End Sub 复制到Sheet3的vba窗口 将sheet3 B列 是21 开头,且 O列>10 ,对应G...

利用宏实现自动筛选:包含固定单元格内容的筛选
回答:假设你在F列使用三个选项,可用变量a1\\a2\\a3来表示,然后使用工作表事件来判断是否在F列改写内容,来触发自动筛选,代码如下: 在当前工作表底部标签名上点鼠标右键,选“查看代码”,在弹出的代码窗口中粘贴下面代码: Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 6 Then ...

excel vba如何获得筛选代码
打开Excel工作表,手动设定筛选条件,按下Alt + F11转入VBA编辑器。选择目标工作表,新增模块。录制宏执行筛选,停止录制。在宏中搜索筛选代码,进行调整和优化以适应需求。保存并执行VBA代码,实现筛选功能。

excel宏 条件筛选?
Dim d Set d = CreateObject("scripting.dictionary")For Each rg In Intersect(Range("a:a"), UsedRange)d(rg.Value) = ""Next For Each rg In Intersect(Range("a:a"), UsedRange)If rg <> "" And d.exists(rg.Value) Then n = n + 1 Range("e" & n) = rg.Value End If ...

excel表格用VBA按照条件进行筛选,
+ 1, "F") = Cells(I, 1)Cells(n + 1, "G") = Cells(I, 2)Cells(n + 1, "H") = Cells(I, 3)Cells(n + 1, "I") = Cells(I, 4)End If Next End Sub B列 订单状态名称为 运输中, 且 C列产品名称数据包含了 裸素鱼竿 都能筛选出来 结果从F列显示 ...

Excel执行宏命令实现“在现有数据表中以某条件筛选后建立一个新表...
使用自定义筛选就可以了 步骤:1 选择需要的列 2 设置好筛选 3 选择筛选中的自定义筛选 4 输入多个条件 这样就可以显示符合多个条件的数据了

相似回答