小春网

 找回密码
 注册账号
查看: 1605|回复: 23
收起左侧

[IT 交流] 重开贴写一个VBA 用form写过滤器

[复制链接]
发表于 2011-12-14 14:08:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

x
本帖最后由 陈酿 于 2011-12-14 18:39 编辑

有两张表,其中一张是original,一张是remark。form上有一个文本框输入<1, >=2, >0.5之类的条件,满足条件的cell,在original表里相同位置的数据保留,剩下的删除。
 楼主| 发表于 2011-12-14 18:59:42 | 显示全部楼层
本帖最后由 陈酿 于 2011-12-14 19:02 编辑

orignal.jpg
original表


remark.jpg

remark表。

现在form那里填上0.5的话在original表的输出结果是

.5.jpg


现在form那里填上1的话在original表的输出结果是

1.jpg

换句话说form里填的是多少就把remark表里不满足条件的数据在original表里去除,这里去除之后生成新表,原表不动


回复

使用道具 举报

发表于 2011-12-14 19:02:53 | 显示全部楼层
知道了,不难的,慢点给你写个sample。今天身体欠安,明天吧。
回复

使用道具 举报

 楼主| 发表于 2011-12-14 19:15:49 | 显示全部楼层
dim s as Integer 文本框
现在form上设计了一个 Generate 按钮,按了之后,触发以下顺序的事件,读取文本框里的数字,然后复制original表,并新建一张表叫做Attribute value max(这里怎么做成动态命名?因为用户可能调用这里多次,每次都想建张新表并保留。)。然后active remark这张表,进行循环比较,循环加判断,if< x cell(i,j)=0 else do thing 是这么写吗?今天写了一下午没写出来,能不能继续帮帮,我太没有编程想象力了

回复

使用道具 举报

 楼主| 发表于 2011-12-14 19:16:16 | 显示全部楼层
sundf 发表于 2011-12-14 19:02
知道了,不难的,慢点给你写个sample。今天身体欠安,明天吧。

十分感谢。我也自己写写看明天
回复

使用道具 举报

发表于 2011-12-15 23:30:10 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.    
  3.     'copy sheet with the input name
  4.     Sheets("original").Select
  5.     Sheets("original").Copy After:=Sheets("original")
  6.     ActiveSheet.Name = TextBox1.Text
  7.    
  8.     Dim i, j As Integer
  9.    
  10.     For i = 2 To Sheets("original").Cells.SpecialCells(xlLastCell).Row
  11.         For j = 2 To Sheets("original").Cells.SpecialCells(xlLastCell).Column
  12.            Select Case ComboBox1.Value
  13.                 Case "<"
  14.                     If CDbl(Sheets("remark").Cells(i, j)) < CDbl(TextBox2.Text) Then
  15.                         Sheets(TextBox1.Text).Cells(i, j) = Sheets("original").Cells(i, j)
  16.                     Else
  17.                         Sheets(TextBox1.Text).Cells(i, j) = 0
  18.                     End If
  19.                 Case "<="
  20.                  '.....
  21.                  
  22.                 End Select
  23.         Next
  24.     Next
  25. End Sub

  26. Private Sub UserForm_Initialize()

  27. ComboBox1.AddItem "<"
  28. ComboBox1.AddItem "<="
  29. ComboBox1.AddItem "="
  30. '......
  31. End Sub
复制代码
不多说,上代码。。。

评分

参与人数 1 +88 收起 理由
憨吃迷糊睡 + 88 赞一个

查看全部评分

回复

使用道具 举报

发表于 2011-12-15 23:34:39 | 显示全部楼层
另外这个是form的样子,textbox1是想生成的sheet名(图的上面),textbox2是条件值,至于下拉筐么上面代码只加了<,<=,=,实际过滤器里只有<的那段,其他你自己加吧。
Untitled.jpg

评分

参与人数 1 +10 收起 理由
憨吃迷糊睡 + 10 O(∩_∩)O~

查看全部评分

回复

使用道具 举报

头像被屏蔽
发表于 2011-12-16 13:03:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
发表于 2011-12-16 13:04:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2011-12-16 23:03:55 | 显示全部楼层
sundf 发表于 2011-12-15 23:30
不多说,上代码。。。

dim s as Integer 文本框
现在form上设计了一个 Generate 按钮,按了之后,触发以下顺序的事件,读取文本框里的数字,然后复制original表,并新建一张表叫做Attribute value max(这里怎么做成动态命名?因为用户可能调用这里多次,每次都想建张新表并保留。)。然后active remark这张表,进行循环比较,循环加判断,if< x cell(i,j)=0 else do thing 是这么写吗?

case 不用,直接 if >=  就可以了,我昨天夜班,回来睡觉,才起来,不好意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小春网
常务客服微信
微信订阅号
手机客户端
扫一扫,查看更方便! 快速回复 返回顶部 返回列表