Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5476|回复: 9

[已解决]vba多条件查询_怎样让结果按原数据单元格的格式粘贴到新工作表

[复制链接]
发表于 2012-11-1 23:23 | 显示全部楼层 |阅读模式
vba多条件查询_怎样让结果按原数据单元格的格式粘贴到新工作表

请朋友老师们帮帮我优化下代码,让查询到的结果按原数据单元格的格式粘贴到新工作表(也就是按数据的单元格格式,如边线,字体等等)

vba多条件查询_怎样让结果按原数据单元格的格式粘贴到新工作表.rar (150.24 KB, 下载次数: 39)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-11-2 07:30 | 显示全部楼层
  1. Sub 查询()    '数据按行遍历
  2.     Application.ScreenUpdating = False
  3.    

  4.     Sheets("查询").Range("a2:n65536").Clear    '首先清除Sheets("查询")工作表中上回查询的历史数据

  5.     n = 2    'n指行数,因为查询表内第一行是标题,所以从第2行开始存放数据

  6.     For i = 2 To Sheets("数据源").Range("b65536").End(xlUp).Row    '从Sheets("数据源")工作表的第2行开始查询

  7.         If Sheets("数据源").Cells(i, "L") > 20 And Sheets("数据源").Cells(i, "N") > 15 And Sheets("数据源").Cells(i, "h") = "男" And Sheets("数据源").Cells(i, "d") = "中级" Then  ''设置查询条件,L列大于20,N列大于15,H列等于男,D列等于中级(这里可以继续增加查询条件)
  8.         
  9.              Sheets("数据源").Rows(i).Copy Rows(n)  '把数据源的第I行数据复制到查询表的第N行
  10.             
  11.             Cells(n, "a") = n - 1    'a表示编号所在列在a列,数据是从第2行开始,所以编号就为n-1

  12.             n = n + 1    'n+1,n行已写入数据,n号往下移一行

  13.         End If
  14.     Next i

  15. End Sub
复制代码
回复

使用道具 举报

发表于 2012-11-2 07:31 | 显示全部楼层    本楼为最佳答案   
vba多条件查询_怎样让结果按原数据单元格的格式粘贴到新工作表.rar (132.5 KB, 下载次数: 386)

评分

参与人数 2 +6 收起 理由
qhllqhll + 3 太棒了!!!
yjwdjfqb + 3 谢谢老师,现在速度快多了!!!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-11-2 09:17 | 显示全部楼层
hwc2ycy 发表于 2012-11-2 07:31

老师你好,谢谢帮我修改的,现在速度快多了,

我看到前面加了一个
    Application.ScreenUpdating = False  '关闭屏幕更新


结束时,需不需要加上恢复屏幕更新的语句

    Application.ScreenUpdating = True                  '恢复屏幕更新




回复

使用道具 举报

发表于 2012-11-2 09:25 | 显示全部楼层
可以加,但是貌似没必要。因为好像只在这个过程起效。
回复

使用道具 举报

发表于 2012-11-2 09:28 | 显示全部楼层
还是加上吧。
是application的属性。
回复

使用道具 举报

 楼主| 发表于 2012-11-2 09:37 | 显示全部楼层
hwc2ycy 发表于 2012-11-2 09:28
还是加上吧。
是application的属性。
Sub 查询() '数据按行遍历

Application.ScreenUpdating = False '关闭屏幕更新

Sheets("查询").Range("a2:n65536").Clear '首先清除Sheets("查询")工作表中上回查询的历史数据

n = 2 'n指行数,因为查询表内第一行是标题,所以从第2行开始存放数据

For i = 2 To Sheets("数据源").Range("b65536").End(xlUp).Row '从Sheets("数据源")工作表的第2行开始查询

If Sheets("数据源").Cells(i, "L") > 20 And Sheets("数据源").Cells(i, "N") > 15 And Sheets("数据源").Cells(i, "h") = "男" And Sheets("数据源").Cells(i, "d") = "中级" Then ''设置查询条件,L列大于20,N列大于15,H列等于男,D列等于中级(这里可以继续增加查询条件)

Sheets("数据源").Rows(i).Copy Rows(n) '(带原数据格式)把数据源的第i行数据复制到查询表的第n行

Cells(n, "a") = n - 1 'a表示编号所在列在a列,数据是从第2行开始,所以编号就为n-1

n = n + 1 'n+1,n行已写入数据,n号往下移一行

End If
Next i

Application.ScreenUpdating = True '恢复屏幕更新

End Sub

是这样的吗老师
回复

使用道具 举报

发表于 2012-11-2 09:37 | 显示全部楼层
yjwdjfqb 发表于 2012-11-2 09:37
是这样的吗老师

对。
回复

使用道具 举报

 楼主| 发表于 2012-11-2 09:40 | 显示全部楼层
hwc2ycy 发表于 2012-11-2 09:37
对。

谢谢你老师!!!

评分

参与人数 1 +3 收起 理由
hoogle + 3 问题解决了,请评最佳答案吧,老师也很辛苦.

查看全部评分

回复

使用道具 举报

发表于 2012-11-28 19:10 | 显示全部楼层
hwc2ycy 发表于 2012-11-2 07:31

大师的“vba多条件查询作的太好了!
请问:'设置查询条件===能否改成在”查询“表的单元格里 任意更改啊?
比方说:sth.Cells(i, "h") = "" ,把这一句改成:sth.Cells(i, "h") = "Sheets("查询").Range("R1").Select.Value "
这样可以在单元格[R1]里 任意修改,
同样把所有条件都设置成 在单元格里任意填写的 条件
谢谢

        If sth.Cells(i, "L") > 20 And sth.Cells(i, "N") > 15 And sth.Cells(i, "h") = "" And sth.Cells(i, "d") = "中级" Then  'L列大于20,N列大于15,H列等于男,D列等于中级(这里可以继续增加查询条件)

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 16:30 , Processed in 0.428362 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表