精华内容
下载资源
问答
  • 课件下载 : 方式1:本节课件下载地址:链接: https://pan.baidu.com/s/1BW1T78d1zpeZq7yFbLOosg 密码: nf97方式2:或点击此处...在模块1中写入下列代码:Sub shaixuan() Range("l1:q10000").ClearConte...

       课件下载 :                                    

    方式1:本节课件下载地址:链接: https://pan.baidu.com/s/1BW1T78d1zpeZq7yFbLOosg 密码: nf97

    方式2:或点击此处下载


    效果图


    代码示例:

        1.在模块1中写入下列代码:

    Sub shaixuan()
    
    Range("l1:q10000").ClearContents
    Range("A1:F232").AutoFilter Field:=4, Criteria1:=Range("i2")
    Range("A1:F232").Copy Range("l1")
    Range("A1:F232").AutoFilter
    
    End Sub

        2.在sheet1中选择通用下拉列表中的WorkSheet  右侧选择Change,写入下列代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Call shaixuan
    Application.EnableEvents = True
    End Sub
    
    
    

    分割线 
    作者: 杨校

    出处: https://blog.csdn.net/kese7952

    分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

     




    展开全文
  • 订购信息:Excel VBA应用开发从基础到实践 已可从第二书店订购http://www.cnblogs.com/maweifeng/archive/2006/08/22/483790.html《ExcelVBA程序设计》最新消息,预计9月上市 1. 问题由来 早晨还没有完全醒来...

    《Excel与VBA程序设计》最新消息,预计9月上市 

        

    1.       问题由来

    早晨还没有完全醒来,你就被电话吵醒,有一个中学同学向你请教一个Excel的问题。作为一个所谓的Excel专家,你经常会受到此类骚扰。问题大概是这样的,一个很大的Excel文件,其中有些行是重复的,也就是说,有2行是完全一样的,而有些行是不重复的,现在的问题是要找出所有不重复或者重复的行,你没有听明白。你大概考虑了一下,用“VLOOKUP”查找一下,然后重新排序,应该就可以了,你需要试一下,然后告诉他怎么用,于是你告诉他,20分钟后再打电话给你。

    2.       问题解决的思路

    你首先打开Excel,输入一些测试数据,大概是这个样子:

     

    1.jpg 

    其中“张三”、“李四”有2个,其他只有一个,需要把他们分出来。首先在B列输入1,然后向下填充,在C列输入“VLOOKUP(A1,$A$1:$B$7,2,FALSE)”[①],如果找到,那么返回1,如果找不到,空着就可以了。结果C列全部变成了1 ,因为查找自己肯定可以找到,那么查找的Range必须要去除本行。

    你接着找了几个其他函数,“MATCH”,“INDEX”试了试,都无法办到;那么用IF函数呢,你开始试着写IF函数。先输入第4行吧,参数和引用区域回头再处理,或许Excel聪明到可以填充出你需要的引用区域。

    你输入了如下的IF函数:

    IF(OR(VLOOKUP(A4,A1:B3,2,FALSE),VLOOKUP(A4,A5:B7,2,FALSE)),1,0)

    真够复杂的,Excel应该开一个小窗口,然后作为代码输入这样的判断逻辑,IF函数可以嵌套7层,真不知道微软的工程师怎么想的[②],你一边嘟囔一边按下了回车,结果是“#N/A”,就是“值不可用”,你知道函数 VLOOKUP如果找不到需要的值,则返回错误值 #N/A,表达式里有了这个东东,所以不管什么计算,结果都是它了。

           从工具菜单选择“错误检查”,“显示计算步骤”,证实了你的猜测,第二个VLOOKUP函数返回的错误值 #N/A传递到了最后。

    2.jpg

     

           这时,你同学的电话来了,你告诉他需要写一段小程序,你决定还是使用直接又简单的VBA来解决问题。

    3.       VBA程序

    打开VBA编辑器,插入一个模块,你不假思索的敲入了以下代码:

     

    Sub SelectDouble()

     

        Dim i As Long, j As Long

       

        For i = 1 To 7 Step 1

            For j = 1 To 7 Step 1

                '不比较相同的行

                If i <> j Then

                    If Range("A" & i).Value = Range("A" & j).Value Then

                        Range("E" & i).Value = 1

                    End If

                End If

            Next j

        Next i

               

    End Sub

     

    点击运行,很好,是重复的都标志了1,没有重复的空着,然后排序就可以了。你很满意你还输入了一行注释。你拨通了你同学的电话,告诉他可以了,然后他打电话给你,你把程序念给他,告诉他该改什么地方。天知道他上学时学的什么语言,反正不是Basic,你得解释Dim是什么含义。经过一番折腾,他终于在电话另一端把代码输入了计算机。作为电信员工的他可以每天24小时用电话聊天,只是可怜你的手机话费单,你叹了口气,该去洗脸刷牙了。

    4.       效率

    洗完脸,刷完牙,你泡好了一杯咖啡,又回到了计算机旁边,电话又来了。你以为是告诉你已经完成了的“喜讯”,听到的却是说死机了,愣了0.1秒钟,你想想应该是程序还在执行或者是死循环。你问了他大概的数据量,知道大概有9000多条记录,还好,你想。

    你检查了一下代码,没有什么死循环,也许是你同学输入时有什么错误,你把循环改到1到10000,然后拿起杯子,咽了一口咖啡,往后靠了靠,等着计算结果。几分钟过去了,还是没有结束,你觉得有些奇怪,你敲了“Ctrl + Break”,暂停了程序,将鼠标放在i变量上,显示i还是24,TNND,你知道是Range函数太慢,算了,你打电话告诉你同学,大概需要几个小时才可以计算完成。你又喝了一口咖啡,自言自语道,比起手工筛选,毕竟很快了。

    但不就不到1万条纪录吗,Excel的VLOOKUP等内置函数一眨眼也就计算好了啊。

    4.1.      通过数组

    数组要比Range函数快一些,你把程序改了一下,定义了2个数组,首先把数据全部读入第一个数组,然后对数组进行操作,对于重复的,把第二个数组的相应部分写为1,计算完成后,根据第二个数组,把结果写回去。程序代码如下:

     

    Sub SelectDouble2()

     

        Dim i As Long, j As Long

        Dim max As Long

        Dim a() As String, b() As Long

       

        max = 10000

       

        ReDim a(max) As String

        ReDim b(max) As Long

       

        For i = 1 To max Step 1

            a(i) = Range("A" & i).Value

        Next i

       

        For i = 1 To max Step 1

            For j = 1 To max Step 1

                '不比较相同的行

                If i <> j Then

                    If a(i) = a(j) Then

                        b(i) = 1

                    End If

                End If

            Next j

        Next i

       

        For i = 1 To max Step 1

            Range("F" & i).Value = b(i)

        Next

               

    End Sub

     

    你执行了一下,对于10000条纪录,大概需要不到5分钟。你觉得很满意,效率提高了几个数量级,你还没有忘记设置了一个max变量,这样,代码使用时改动就会少很多。

    4.2.      使用内置函数

    你又想起了VLOOKUP这个函数,真是阴魂不散。是啊,为什么VLOOKUP执行这么快,当然是因为它是编译好的,不是用VBA写的[③]。你灵机一动,为什么不用这个函数呢,在VBA中,可以使用Application.函数名,调用Excel的内置函数。这样,改过的代码如下:

     

    Sub SelectDouble3()

     

        Dim i As Long, j As Long, a, b

       

        For i = 2 To 9999 Step 1

            a = Application.VLookup(Range("A" & i), Range("A1:B" & (i - 1)), 2, False)

            b = Application.VLookup(Range("A" & i), Range("A" & (i + 1) & ":B1000"), 2, False)

            If IsError(a) And IsError(b) Then

                Range("G" & i).Value = 0

            End If

        Next i

               

    End Sub

     

    代码很短,但有一点复杂和讨厌,循环是从2到9999,因为为了防止VLOOKUP函数的Range范围失效,所以这两行需要手动处理。IsError函数来检测返回值,如果两个返回值都是错误,则此行为单一的没有重复的行,标志为0即可。程序执行速度和上面的差不多,至少你没有感觉出来差别。

    4.3.      继续Hack

    到这里,你还是觉得不满意,使用数组,数据量太大会内存吃紧,使用VLOOKUP函数,代码觉得很丑陋[④]。你不知道为什么想起来二分查找之类的东东,那么,查找前应该先排序,你在Excel里把数据排了序。现在的问题是需要循环2次,复杂度为N*N,如果…...,你想如果排好了序,只需要检查当前数值和下一个是否一样,如果一样,那么把当前和下一个位置标示出来,循环变量加2,跳过下一个,如果不一样,循环变量加1继续比较就可以了,代码如下:

     

    Sub SelectDouble4()

     

        Dim i As Long, Max As Long

       

        Max = 10000

        i = 1

        Do

            If Range("A" & i).Value = Range("A" & (i + 1)).Value Then

                Range("I" & i).Value = 1

                Range("I" & (i + 1)).Value = 1

                i = i + 2

            Else

                i = i + 1

            End If

        Loop While i < Max

                   

    End Sub

     

    这个程序复杂度只有N,执行速度当然是你今天写的所有程序里最快的,而且内存占用也最小。你觉得很满意,露出了贼贼的笑容。

    5.       总结

    你打开了日志,开始记下了今天问题的解决过程。

    你想,嗯,如果只是想怎样把Range函数变快来解决问题,速度不会有本质的提高。速度提高,第一,排序才是关键,快速的查找和搜索都是要基于排好序的内容,比如二分查找,那么,为什么数据库要建索引,索引的有无对于查找速度影响很大,道理都是一样的了;第二,查找时没有回溯,对于查找过的内容直接跳过,这个和字符串的匹配算法,好像是KMP算法[⑤],思路是一样的,嗯,那么如果不是相同的内容不是2个,是多个,那么你可以使用一个循环来前溯,并且,对于不同的个数,可以标识为不同的数字。你忽然觉得自信满满,似乎要忘了已经失业半年的事实。

     

    (2004-11-23 夜)



    [①] 在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。当比较值位于数据表首列时,可以使用函数 VLOOKUP 代替函数 HLOOKUP。具体用法可以参考Excel帮助。

    [②] 作为程序员的你,一直觉得IF函数之类是浪费时间和多此一举,7层的IF函数怎么看得懂?但函数代表简单,你不想因为告诉你同学要写程序解决问题而把他吓坏。

    [③] 天知道微软用什么写的这些代码,也许是C,也许是C++,肯定不是Basic,也不是C#,写它时C#还没有出生呢。

    [④]或许是你没有写好。

    [⑤] 虽然不是科班出身,你也学过数据结构和算法的。

    转载于:https://www.cnblogs.com/maweifeng/archive/2004/12/01/71504.html

    展开全文
  • Excel VBA技巧实例手册

    2016-07-28 22:29:39
    第1篇 ExcelVBA基础 第1章 了解Excel宏 1.1 创建宏 技巧001显示“开发工具”选项卡 技巧002录制第一个宏 技巧003在VBE中创建宏 1.2 管理宏 技巧004运行宏 技巧005编辑宏 技巧006保存宏 技巧007设置宏的安全性 第2...
  • 最新Excel VBA活用范例大辞典 光盘

    热门讨论 2012-01-31 13:58:10
    包括操作管理Excel VBA常见对象(Application对象、Workbook对象、Worksheet对象、Range对象、Chart对象、Shape对象、窗体控件对象以及对象事件)、创建自定义菜单和自定义工具栏、操作数据库、设计程序结构、打印...
  • 任务看起来很简单,手动筛选另存一下不就好了,何必写程序,对吧?如果只是一两个文件,偶尔为之还行,但是生产线这样的Excel数据表有几十个,需要每天处理一次,没有效率,那肯定没人愿意干的。幸运的是这些表格...

    这是我利用业余时间为公司 MES 项目写的一个辅助程序,现学现用的成果,学艺不精,花了不少时间。

    任务要求:按日期筛选数据,将筛选结果另存为一个新的工作簿。

    69e9f5cdfff4fdd7b7562f297e5009b0.png

    任务看起来很简单,手动筛选另存一下不就好了,何必写程序,对吧?

    如果只是一两个文件,偶尔为之还行,但是生产线这样的 Excel 数据表有几十个,需要每天处理一次,没有效率,那肯定没人愿意干的。幸运的是这些表格之前也是我为车间设计的,格式统一,这样处理起来就容易了。

    刚开始只要求做个简单的宏按钮放在 Excel 表中,由员工点击按钮导出数据。每次都需要打开表格手动点击,输入要筛选的日期,然后导出数据,在动手写代码的过程中,觉得这样不完美,不符合我的“懒人生存法则”。上班时间没空琢磨代码,只能业余时间解决,经过不懈努力,终于圆满完成任务。27c2557f621667ebee7d96e1d8be715f.png

    程序实现了无需人工执行数据导出操作,自动根据当天日期判断提取数据,并另存为新文件。

    代码共享如下:

    Sub mes()Application.ScreenUpdating = False  '关闭屏幕更新'    Dim date1 As Date   '定义量变为日期型'    Dim count1 As Integer   '定义变量为整型    Dim file, filelen As String '定义变量为字符型    Dim c1, c2 As Date  '定义变量为日期型    Dim title   '不指定变量类型    title = Range("A1:T1")  '将标题行区域赋值给变量        On Error Resume Next    '忽略错误,继续运行。    fp = ThisWorkbook.Path & "\mes\"    '将文件夹路径赋值给变量    VBA.MkDir fp    '根据路径变量创建文件夹    i = Application.CountA(Sheets("数据源").Range("B:B")) '计算非空行数'    MsgBox ("共有" & i & "行") '弹出消息窗    c1 = Cells(i, 2)    '最后一个单元格赋值给变量    c2 = Cells(i - 1, 2)    '倒数第二个单元格赋值给变量    If c1 = Date Then   '判断最后一个日期是否与当日相等,是则执行下面的 DO 循环。        Do While c1 = c2    '当比较结果为真时执行循环            i = i - 1            c1 = Cells(i, 2)    '重新给变量赋值        Loop    '当比较结果为真时返回 DO 循环,否则退出循环。    End If  '退出 IF        file = ActiveWorkbook.Name '返回活动工作薄的名称    filelen = Len(file) '计算文件名长度    file = Left(file, filelen - 5) & c1 & ".xlsx" '文件名后添加日期    file = ThisWorkbook.Path & "\mes\" & file         '将要判断的文件名及路径保存到变量file中'    MsgBox (file)   '显示文件名    Set cn = CreateObject("adodb.connection")   '建立数据库连接'    cn.Open "provider=microsoft.jet.oledb.4.0;Extended Properties='Excel 8.0';data source=" & ThisWorkbook.FullName '建立 Excel 连接,这句不兼容Office 2019    cn.Open "provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 8.0';data source=" & ThisWorkbook.FullName '建立 Excel 连接    Sql = "select * from [数据源$] where 日期=#" & c1 & "#"   '按日期抽取数据        If Len(Dir(file)) > 0 Then  '判断文件是否存在'        MsgBox "工作薄已存在!"        Exit Sub    '退出程序    Else    '否则执行下面的语句        Dim wb As Workbook, sht As Worksheet   '定义一个workbook 对象和一个 worksheet 对象        Set wb = Workbooks.Add '新建一个工作薄        Set sht = wb.Worksheets(1)        With sht        .Name = "数据"  '修改工作表名称        .Range("A1:F1") = title '设置表头        End With                Sheets("数据").[A2].CopyFromRecordset cn.Execute(Sql)   '将抽取的数据复制到新表的 A2 单元格        Dim x As Long   '设置变量        x = ActiveSheet.Cells(Rows.Count, 2).End(3).Row '计算活动工作表按第 2(B)列数据总行数                      Columns("B:B").Select   '选择 B 列        Cells(2, 2) = "'" & Application.Text(Cells(2, 2), "yyyy-m-d")   '添加单引号,变为强制文本格式        Range("B2").Select  '选择B2单元格        Selection.AutoFill Destination:=Range(Cells(2, "B"), Cells(x, "B")), Type:=xlFillCopy '从 B2 单元格开始向下填充至最后一行数据区        Columns("E:E").Select   '选择 E 列        Cells(2, 5) = "'" & Application.Text(Cells(2, 5), "h:mm")   '添加单引号,变为强制文本格式        Range("E2").Select  '选择 E2 单元格        Selection.AutoFill Destination:=Range(Cells(2, "E"), Cells(x, "E")), Type:=xlFillCopy '从 E2 单元格开始向下填充至最后一行数据区                Cells.Select    '整表选中        Cells.EntireColumn.AutoFit  '自动对齐        Range("A2").Select  '定位到 A2                wb.SaveAs Filename:=file    '保存工作薄利        ActiveWorkbook.Close    '关闭活动工作薄        savechanges = False '不提示保存更改        Application.ScreenUpdating = True   '打开屏幕更新'        MsgBox "取数据成功"        cn.Close    '关闭变量        Set cn = Nothing    '释放内存    End If '结束判断End Sub '退出程序

    在 VBA 工程中设置打开工作簿时执行这个程序就可以了。

    e2a923063ab324c390213329ff8e9472.png

    Private Sub Workbook_Open()Application.WindowState = xlMaximized   '窗口最大化    Call mesEnd Sub
    展开全文
  • Excel VBA范例大全 罗刚君 高清PDF 分卷2 全书从应用与实用的角度出发,通过实例精讲的形式,详细介绍了Excel2007VBA在各种领域应用编程的各种方法、思路与问题处理技巧。本书共分17部分,主要内容包括:单元格选择...
  • Excel VBA范例大全 罗刚君 高清PDF 分卷1 全书从应用与实用的角度出发,通过实例精讲的形式,详细介绍了Excel2007VBA在各种领域应用编程的各种方法、思路与问题处理技巧。本书共分17部分,主要内容包括:单元格选择...
  • excel vba】拆分表格

    2020-07-30 23:17:06
    拆分表格并保存函数Application主程序对象Open 打开文件Add 新建工作簿练习拆分表存储成文件利用筛选分离表格内容 函数 Application主程序对象 application.displayalsert=false 表示不要弹窗 Open 打开文件 eg : ...

    函数

    Application主程序对象

    application.displayalsert=false 表示不要弹窗

    Open 打开文件

    eg :

    application screenupdating=false//不要屏幕更新
    Workbooks. Open Filename:="d:\data\1.xlsx"
    activeworkbook.sheets(1).range("a1") = "lala"//表示打开当前文件输入的标记
    activeworkbook.save
    activeworkbook.close
    application.displayalsert=true
    

    Add 新建工作簿

    eg:

    Sub one()
    Workbooks.Add
    ActiveWorkbook.Sheets(1).Range("a1") = "llll"
    ActiveWorkbook.SaveAs Filename:="C:\Users\zsnzd\Desktop\excel\第四节\22.xlsx"
    ActiveWorkbook.Close
    
    End Sub
    
    

    range(“范围”)
    **Save/Save as 保存工作簿
    Close关闭工作簿
    Select(选中)
    Delete(删除)
    Copy(复制)
    ClearContents(清空)
    Value(值) Text(内容文字)
    Row(行号) Column(列号)
    Entirerow单元格所在整行 **

    Merge合并

    AutoFilter(自动筛选)

    Offset 偏移

    新建表时回避重名错误

    Msgbox和Inputbox窗口函数

    在这里插入图片描述
    在这里插入图片描述

    Sub chuan()
        Msgbox "你好"
        m = InputBox("请输入第" & m & "例")
    End Sub
    

    练习

    拆分表存储成文件

    注意i容易出错

    Sub chaifen()
    Dim sht As Worksheet
    Dim i As Integer
    For Each sht In Sheets
        
        sht.Copy
        ActiveWorkbook.SaveAs Filename:="C:\Users\zsnzd\Desktop\excel\第四节\" & sht.Name & ".xlsx"
        ActiveWorkbook.Close
    
    Next
    Application.DisplayAlerts = True
    End Sub
    
    

    结合上一讲综合练习
    在这里插入图片描述

    //删除空格,填充
    Sub shaixuan()
    Dim sht As Worksheet
    Dim i As Integer
    
    For Each sht In Sheets
        For i = 100 To 2 Step -1
            If sht.Cells(i, 4) = "" Then
                sht.Range("d" & i).EntireRow.Delete
            End If
            
            
            If sht.Cells(i, 2) = "理工" Then
                sht.Cells(i, 3) = "lg"
            ElseIf sht.Cells(i, 2) = "文科" Then
                sht.Cells(i, 3) = "wg"
            Else
                sht.Cells(i, 3) = "ck"
            End If
            
            If sht.Cells(i, 5) = "男" Then
                sht.Cells(i, 6) = "先生"
            Else
                sht.Cells(i, 6) = "女士"
            End If
        Next
        
    Next
    
    End Sub
    
    //拆成文件
    Sub chai()
    Dim sht As Worksheet
    For Each sht In Sheets
        sht.Copy
        ActiveWorkbook.SaveAs Filename:="C:\Users\zsnzd\Desktop\excel\第四节\" & sht.Name & ".xlsx"
        ActiveWorkbook.Close
    Next
    Application.DisplayAlerts = True
    End Sub
    
    

    合并单元格

    利用筛选分离表格内容

    **注意
    1、end后面的row
    2、k是整数型
    3、range(“a1:f”&k)
    4、copy后面直接加sht.单元格
    5、Criteria1:="=" 这里是one
    **
    在这里插入图片描述

    Sub 用筛选拆分()
    Dim i As Integer
    Dim sht As Worksheet
    
    i = Sheet1.Range("a65535").End(xlUp).Row
    For Each sht In Worksheets
        If sht.Name <> 数据 Then
        
            Sheet1.Range("a1:f" & i).AutoFilter field:=4, Criteria1:="=" & sht.Name
            Sheet1.Range("a1:f" & i).Copy sht.Range("a1")
        
        End If
    Next
    
    Sheet1.Range("a1:f" & i).AutoFilter
    End Sub
    

    按照a1建表(避免重复名字)

    **注意:
    1、i表示对行的循环整数
    2、k表示布尔值判断作用
    3、所有表的后面建sheets.add after:=
    **
    在这里插入图片描述

    Sub bimian()
    Dim sht As Worksheet
    Dim i As Integer
    Dim k As Integer
    For i = 1 To Sheet1.Range("a65536").End(xlUp).Row
        k = 0
        For Each sht In Sheets
            If sht.Name = Sheet1.Range("a" & i) Then
                k = 1
            End If
        Next
        If k = 0 Then
            Sheets.Add after:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = Sheet1.Range("a" & i)
        End If
    Next
    End Sub
    

    填充数据到指定表格里

    Sub chai()
    Dim sht As Worksheet
    Dim k As Integer
    k = Sheet1.Range("a65536").End(xlUp).Row
    For Each sht In Sheets
    If sht.Name <> 数据 Then
        Sheet1.Range("a1:f" & k).AutoFilter field:=4, Criteria1:="=" & sht.Name
        Sheet1.Range("a1:f" & k).Copy sht.Range("a1")
    Next
    Sheet1.Range("a1:f" & k).AutoFilter
    End Sub
    

    将数据表单元格创建分表再填充数据

    Sub chai()
    Dim sht As Worksheet
    Dim k, i, j As Integer
    k = Sheet1.Range("a65536").End(xlUp).Row
    '拆分
    For i = 2 To k
        j = 0
        For Each sht In Worksheets
            If sht.Name = Sheet1.Range("d" & i) Then
                j = 1
            End If
        Next
        If j = 0 Then
           Sheets.Add after:=Sheets(Sheets.Count)
           Sheets(Sheets.Count).Name = Sheet1.Range("d" & i)
        End If
    Next
        '填数据
    For Each sht In Worksheets
        If sht.Name <> 数据 Then
            Sheet1.Range("a1:f" & k).AutoFilter field:=4, Criteria1:="=" & sht.Name
            Sheet1.Range("a1:f" & k).Copy sht.Range("a1")
        End If
    Next
    
    Sheet1.Range("a1:f" & k).AutoFilter
    End Sub
    

    综合训练

    利用窗口函数吧上面的动作重新来一遍

    Sub chai()
    Dim sht As Worksheet
    Dim k, i, j As Integer
    k = Sheet1.Range("a65536").End(xlUp).Row
    Msgbox "你好"
    m = InputBox("请输入一个" & m & "列")
    '拆分
    For i = 2 To k
        j = 0
        For Each sht In Worksheets
            If sht.Name = Sheet1.Range("d" & i) Then
                j = 1
            End If
        Next
        If j = 0 Then
           Sheets.Add after:=Sheets(Sheets.Count)
           Sheets(Sheets.Count).Name = Sheet1.Range("d" & i)
        End If
    Next
        '填数据
    For Each sht In Worksheets
        If sht.Name <> 数据 Then
            Sheet1.Range("a1:f" & k).AutoFilter field:=m, Criteria1:="=" & sht.Name
            Sheet1.Range("a1:f" & k).Copy sht.Range("a1")
        End If
    Next
    
    Sheet1.Range("a1:f" & k).AutoFilter
    End Sub
    
    
    

    把分表内容整合到sht1

    注意
    1、清空内容要指定range范围

    Sub hebing()
    Dim i, j As Integer   //i是数据源表的最后一行,j是目标表(数据表)的最后一行
    Dim sht As Worksheet
    
    
    //先要删除所有数据
    Sheet1.Range("a1:f65536").ClearContents
    
    //复制表头
    Sheet2.Range("a1:f1").Copy Sheet1.Range("a1")
    
    //复制数据
    For Each sht In Sheets
        If sht.Name <> "数据" Then
            i = sht.Range("a65536").End(xlUp).Row
            j = Sheet1.Range("a65536").End(xlUp).Row
            
            sht.Range("a2:f" & i).Copy Sheet1.Range("a" & j + 1)
        End If
    Next
    End Sub
    
    
    
    
    展开全文
  • 闲言少叙,先上效果图:涉及的知识点:切片器(链接数据透视表,切片器格式化)Worksheet_PivotTableUpdate透视表更新事件VBA自动筛选程序(AutoFilter代码用于筛选该城市经销商)定义名称(offset函数动态引用区域,用于...
  • 01001获取Excel版本 01002获取Excel的安装路径 01003获取当前用户名称 01004获取注册组织名称 01005获取当前操作系统的名称和版本号 01006获取启动Excel的路径 01007获取打开Excel文件时的默认路径 01008获取模板...
  • 闲言少叙,先上效果图:涉及的知识点:切片器(链接数据透视表,切片器格式化)Worksheet_PivotTableUpdate透视表更新事件VBA自动筛选程序(AutoFilter代码用于筛选该城市经销商)定义名称(offset函数动态引用区域...
  • 用 Python 让 Excel 快速按条件筛选数据 本文即使用python实现excel快速筛选数据 ...可以调用 Excel 文件中 VBA 写好的程序,也可以让 VBA 调用用 Python 写的程序 开源免费,一直在更新 导入 xlwings: i
  • VBA程序处理Excel数据文件,用户的数据文件有时处于自动筛选模式,往往导致数据处理不正确,为此,需要检测工作表是否处于该模式,如果是,则去掉自动筛选,语句如下:  If ActiveSheet.AutoFilterMode = True ...
  • 很多时候,我们需要对表格数据进行查询,如果每次进行筛选的话,操作不方便,我们可以制作一个简易的查询小系统,轻松的查询想要的数据,秒变大神,制作的效果如下所示:即可以进行某个条件的查询数据,比如,输入你...
  • 目录 '1.函数作用:返回 Column 英文字............函数作用:等用Shell调用的程序执行完成后再执行其它程序...................................................112 '111.函数作用:将Mouse显示成动画....................
  • VBA程序处理Excel数据文件。用户的数据文件有时处于自己主动筛选模式,往往导致数据处理不对。为此,须要检測工作表是否处于该模式,假设是,则去掉自己主动筛选。语句例如以下: If ActiveSheet.AutoFilterMode...
  • VBA

    2014-08-29 11:23:00
    学了两天的VBA 终于自己写了个小程序excel里面用VBA来处理还真是方便快捷。 //这个程序的主要作用是,自动筛选透视图中所用值,每次筛选之后,自动复制这些值到另一个sheet。 Sub test() Dim i As IntegerDim j...
  • 很多时候,我们需要对表格数据进行查询,如果每次进行筛选的话,操作不方便,我们可以制作一个简易的查询小系统,轻松的查询想要的数据,秒变大神,制作的效果如下所示:即可以进行某个条件的查询数据,比如,输入你...
  • 实例16 :替代 VLOOUP、SUMPRODUCT 的VBA编码-多重 Join 的使用(第7页69楼) 实例17:列出库中欠缺编号-NOT IN 的应用(第8页71楼) 实例18:用 Union 从字段不相同的两个 Access 表中筛选记录后按相似字段排序...
  • 在幻灯表播放时,数据会变动需要在ppt中,先插入一个excel对象,在其中编辑数据,做成动态图,然后将ppt上的控件,链接到excel中,即可在ppt放映时,自动筛选数据。程序内容:
  • 今天,花了三四个小时用VBA写了几段程序,成功的减少了手动作业和提升了工作效率。主要成果是完成了以下操作的自动化:1. 提取数据,复制到工作表,然后另存为带有时间戳的文件到指定文件夹2. 自动筛选数据,然后...
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧37 使用高级筛选获得不重复记录 12 技巧38 工作表的保护与解除保护 12 技巧39 奇偶页打印 12 第3章 Wordbook(工作簿)对象 12 技巧40 工作簿的引用方法 12 40-1 使用工作簿的名称 12 40-2 使用工作簿的索引号 ...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    VBA常用技巧 目录 VBA常用技巧 1 第1章 Range(单元格)对象 10 技巧1 单元格的引用方法 10 1-1 使用Range属性 10 1-2 使用Cells属性 11 1-3 使用快捷记号 11 1-4 使用Offset属性 12 1-5 使用Resize属性 13 1-6 使用...
  • Excel2007应用大全.pdf

    2019-07-23 08:22:39
    第二部分介绍了Excel2007的新特性,如大网格、神奇的表智能、数据透视表、增强的数据筛选和排序、增强的图表处理功能;第三部分介绍了Excel2007与早期版本的衔接问题;第四部分详细讨论Excel2007核心功能——数据...
  • Access 2007 VBA宝典 4/4

    2012-03-31 08:36:49
     Access从一开始(大约14年前)就是一个关系型数据库程序,它在表中存储数据,并使用自己的查询、窗体和报表对数据进行排序、筛选、显示和打印。随着Office版本的升级,在Office组件(特别是Word、Excel和Outlook)...
  • Access 2007 VBA宝典 2/4

    2012-03-31 08:22:16
     Access从一开始(大约14年前)就是一个关系型数据库程序,它在表中存储数据,并使用自己的查询、窗体和报表对数据进行排序、筛选、显示和打印。随着Office版本的升级,在Office组件(特别是Word、Excel和Outlook)...
  • Access 2007 VBA宝典 3/4

    2012-03-31 08:31:46
     Access从一开始(大约14年前)就是一个关系型数据库程序,它在表中存储数据,并使用自己的查询、窗体和报表对数据进行排序、筛选、显示和打印。随着Office版本的升级,在Office组件(特别是Word、Excel和Outlook)...

空空如也

空空如也

1 2 3 4 5 6
收藏数 105
精华内容 42
关键字:

vbaexcel筛选程序