Excel精英培训网

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

[已解决]再问一个贻笑大方的问题。

[复制链接]
发表于 2012-11-20 12:49 | 显示全部楼层 |阅读模式
本帖最后由 wshnyy 于 2012-11-20 13:06 编辑

sub dataautofilter()
               worksheets("sheet1") .range("A23").autofilter  field:=1, criterial:= "service"
                 end sub
这个是excel 2003 版的。
请问,2007 版的该怎样写?

非常感谢

另外,我想把筛选出来的内容,copy 到 sheet3的range(“D5”)下。

应该怎么办?

最佳答案
2012-11-20 15:59
Sub Test()
    Dim sh As Worksheet, d As Object
    Dim i%, j&, jj&, x%
    Dim arr1, arr2, k
   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
   
    '删除总表以外的所有工作表
    For Each sh In Worksheets
        If sh.Name <> Worksheets(1).Name Then
            sh.Delete
        End If
    Next sh
   
    '赋初值
    Set d = CreateObject("Scripting.Dictionary")
    arr1 = Range("b9").CurrentRegion '注意修改
    arr2 = arr1
    x = InputBox("按数据源的第几列分:", , 1)
   
    '判断
    If VBA.IsNumeric(x) = False Then
        MsgBox "输入列号不合法,请重新输入!", 48, "出错了"
        End
    End If
    '建立分表名称数组
    For i = 2 To UBound(arr1, 1)
        If Len(arr1(i, x)) Then d(arr1(i, x)) = ""
    Next i
    k = d.keys
    '循环每个新表
    For i = 0 To UBound(k)
        Sheets.Add after:=Sheets(Sheets.Count)
        ActiveSheet.Name = i 'k(i)
        '循环每行
        For j = 1 To UBound(arr1, 1)
            '如果列值不是分表名称,则整行清零
            If arr1(j, x) <> k(i) And j <> 1 Then
                '第j行整行清零
                For jj = 1 To UBound(arr1, 2)
                    arr1(j, jj) = ""
                Next jj
            End If
        Next j
        Range("a1").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
        Range("a1:a" & UBound(arr1, 1)).SpecialCells(xlCellTypeBlanks).Delete (3)
        '恢复arr1数据
        arr1 = arr2
    Next i
   
    Sheets(1).Select
End Sub
筛选3.rar (22.43 KB, 下载次数: 10)
发表于 2012-11-20 13:00 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-11-20 13:03 | 显示全部楼层
有呀。我在excel 2007上运行出错。

要不是我的上面程序写错?
回复

使用道具 举报

发表于 2012-11-20 13:16 | 显示全部楼层
自动筛选?再自己录制一个宏看看呗
回复

使用道具 举报

 楼主| 发表于 2012-11-20 13:36 | 显示全部楼层
蝶·舞 发表于 2012-11-20 13:16
自动筛选?再自己录制一个宏看看呗

怎样录制呀?能帮个忙吗?谢谢
回复

使用道具 举报

发表于 2012-11-20 14:02 | 显示全部楼层
既然是想复制那就用高级筛选吧

Range.AdvancedFilter

看一下这个的帮助,应该很简单的!!


回复

使用道具 举报

发表于 2012-11-20 14:08 | 显示全部楼层
http://www.excelpx.com/thread-289214-1-1.html

这里有一个简单的示例

如果是要多条件,只需要增加条件区域就可以了
条件区域是要求包含标题的!!
并用支持模糊查找
比如 大于10 则  >10
回复

使用道具 举报

发表于 2012-11-20 14:53 | 显示全部楼层
  1. Sub dataautofilter()
  2.     Worksheets("Sheet1").Range("A23").CurrentRegion.AutoFilter field:=1, Criteria1:="service"
  3. End Sub
复制代码
A23那块区域是否有内容?
回复

使用道具 举报

 楼主| 发表于 2012-11-20 15:08 | 显示全部楼层
hwc2ycy 发表于 2012-11-20 14:53
A23那块区域是否有内容?

不好意思,应该是A33

老师:

我的例子见附件。

我想把sheet1中的表,把service中的6项,依次筛选后,分别复制到sheet2 到sheet7中 的range(“C6”)。

帮我看看该怎么办。。

我是大菜鸟。。。谢谢


筛选.rar

7.49 KB, 下载次数: 6

回复

使用道具 举报

发表于 2012-11-20 15:59 | 显示全部楼层    本楼为最佳答案   
Sub Test()
    Dim sh As Worksheet, d As Object
    Dim i%, j&, jj&, x%
    Dim arr1, arr2, k
   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
   
    '删除总表以外的所有工作表
    For Each sh In Worksheets
        If sh.Name <> Worksheets(1).Name Then
            sh.Delete
        End If
    Next sh
   
    '赋初值
    Set d = CreateObject("Scripting.Dictionary")
    arr1 = Range("b9").CurrentRegion '注意修改
    arr2 = arr1
    x = InputBox("按数据源的第几列分:", , 1)
   
    '判断
    If VBA.IsNumeric(x) = False Then
        MsgBox "输入列号不合法,请重新输入!", 48, "出错了"
        End
    End If
    '建立分表名称数组
    For i = 2 To UBound(arr1, 1)
        If Len(arr1(i, x)) Then d(arr1(i, x)) = ""
    Next i
    k = d.keys
    '循环每个新表
    For i = 0 To UBound(k)
        Sheets.Add after:=Sheets(Sheets.Count)
        ActiveSheet.Name = i 'k(i)
        '循环每行
        For j = 1 To UBound(arr1, 1)
            '如果列值不是分表名称,则整行清零
            If arr1(j, x) <> k(i) And j <> 1 Then
                '第j行整行清零
                For jj = 1 To UBound(arr1, 2)
                    arr1(j, jj) = ""
                Next jj
            End If
        Next j
        Range("a1").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
        Range("a1:a" & UBound(arr1, 1)).SpecialCells(xlCellTypeBlanks).Delete (3)
        '恢复arr1数据
        arr1 = arr2
    Next i
   
    Sheets(1).Select
End Sub
筛选3.rar (22.43 KB, 下载次数: 10)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 11:46 , Processed in 0.371525 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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