Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用条件将数据从一个工作表复制到另一个工作表

如何使用条件将数据从一个工作表复制到另一个工作表
EN

Stack Overflow用户
提问于 2017-04-11 06:37:00
回答 1查看 86关注 0票数 0

希望有人能帮我解决我的问题。我希望在满足条件后将特定的列和行复制到另一个工作表中。我的工作表由43列组成,其中我只需要复制29列。

EN

回答 1

Stack Overflow用户

发布于 2017-04-11 17:25:27

下面代码示例的范围如下所示

代码语言:javascript
运行
AI代码解释
复制
Column A : Header in A1 = Country, A2:A? = Country names
Column B : Header in B1 = Name, B2:B? = Names
Column C : Header in C1 = Gender, C2:C? = F or M
Column D : Header in D1 = Birthday, D2:D? = Dates

此示例将范围第一列中具有相同值的所有行复制到新工作表中。它将对此列中的每个唯一值执行此操作。工作表将以唯一值命名。

在运行宏之前,请检查宏中这些行的信息是否正确

1:在ActiveSheet上设置筛选范围: A1是筛选范围的左上角单元格,是第一列的表头,D是筛选范围的最后一列。您还可以将工作表名称添加到代码中,如下所示: Worksheets("Sheet1").Range("A1:D“&LastRow(Worksheets(”Sheet1“)当您使用此命令运行宏时,不需要工作表处于活动状态。设置范围= My_Range (“A1:D”& LastRow(ActiveSheet))

2:设置筛选字段:此示例对范围中的第一列进行筛选(如果需要,请更改该字段)。在这种情况下,范围从A开始,因此字段1是列A,2=列B,......FieldNum =1

3:重要提示:此宏调用一个名为LastRow的函数您可以在宏下找到此函数,请将此函数与宏一起复制到标准模块中

代码语言:javascript
运行
AI代码解释
复制
Sub Copy_To_Worksheets()
'Note: This macro use the function LastRow
    Dim My_Range As Range
    Dim FieldNum As Long
    Dim CalcMode As Long
    Dim ViewMode As Long
    Dim ws2 As Worksheet
    Dim Lrow As Long
    Dim cell As Range
    Dim CCount As Long
    Dim WSNew As Worksheet
    Dim ErrNum As Long

    'Set filter range on ActiveSheet: A1 is the top left cell of your filter range
    'and the header of the first column, D is the last column in the filter range.
    'You can also add the sheet name to the code like this :
    'Worksheets("Sheet1").Range("A1:D" & LastRow(Worksheets("Sheet1")))
    'No need that the sheet is active then when you run the macro when you use this.
    Set My_Range = Range("A1:D" & LastRow(ActiveSheet))
    My_Range.Parent.Select

    If ActiveWorkbook.ProtectStructure = True Or _
       My_Range.Parent.ProtectContents = True Then
        MsgBox "Sorry, not working when the workbook or worksheet is protected", _
               vbOKOnly, "Copy to new worksheet"
        Exit Sub
    End If

    'This example filters on the first column in the range(change the field if needed)
    'In this case the range starts in A so Field:=1 is column A, 2 = column B, ......
    FieldNum = 1

    'Turn off AutoFilter
    My_Range.Parent.AutoFilterMode = False

    'Change ScreenUpdating, Calculation, EnableEvents, ....
    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    ActiveSheet.DisplayPageBreaks = False

    'Add a worksheet to copy the a unique list and add the CriteriaRange
    Set ws2 = Worksheets.Add

    With ws2
        'first we copy the Unique data from the filter field to ws2
        My_Range.Columns(FieldNum).AdvancedFilter _
                Action:=xlFilterCopy, _
                CopyToRange:=.Range("A1"), Unique:=True

        'loop through the unique list in ws2 and filter/copy to a new sheet
        Lrow = .Cells(Rows.Count, "A").End(xlUp).Row
        For Each cell In .Range("A2:A" & Lrow)

            'Filter the range
            My_Range.AutoFilter Field:=FieldNum, Criteria1:="=" & _
             Replace(Replace(Replace(cell.Value, "~", "~~"), "*", "~*"), "?", "~?")

            'Check if there are no more then 8192 areas(limit of areas)
            CCount = 0
            On Error Resume Next
            CCount = My_Range.Columns(1).SpecialCells(xlCellTypeVisible) _
                     .Areas(1).Cells.Count
            On Error GoTo 0
            If CCount = 0 Then
                MsgBox "There are more than 8192 areas for the value : " & cell.Value _
                     & vbNewLine & "It is not possible to copy the visible data." _
                     & vbNewLine & "Tip: Sort your data before you use this macro.", _
                       vbOKOnly, "Split in worksheets"
            Else
                'Add a new worksheet
                Set WSNew = Worksheets.Add(After:=Sheets(Sheets.Count))
                On Error Resume Next
                WSNew.Name = cell.Value
                If Err.Number > 0 Then
                    ErrNum = ErrNum + 1
                    WSNew.Name = "Error_" & Format(ErrNum, "0000")
                    Err.Clear
                End If
                On Error GoTo 0

                'Copy the visible data to the new worksheet
                My_Range.SpecialCells(xlCellTypeVisible).Copy
                With WSNew.Range("A1")
                    ' Paste:=8 will copy the columnwidth in Excel 2000 and higher
                    ' Remove this line if you use Excel 97
                    .PasteSpecial Paste:=8
                    .PasteSpecial xlPasteValues
                    .PasteSpecial xlPasteFormats
                    Application.CutCopyMode = False
                    .Select
                End With
            End If

            'Show all data in the range
            My_Range.AutoFilter Field:=FieldNum

        Next cell

        'Delete the ws2 sheet
        On Error Resume Next
        Application.DisplayAlerts = False
        .Delete
        Application.DisplayAlerts = True
        On Error GoTo 0

    End With

    'Turn off AutoFilter
    My_Range.Parent.AutoFilterMode = False

    If ErrNum > 0 Then
        MsgBox "Rename every WorkSheet name that start with ""Error_"" manually" _
             & vbNewLine & "There are characters in the name that are not allowed" _
             & vbNewLine & "in a sheet name or the worksheet already exist."
    End If

    'Restore ScreenUpdating, Calculation, EnableEvents, ....
    My_Range.Parent.Select
    ActiveWindow.View = ViewMode
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = CalcMode
    End With

End Sub


Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlValues, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
    On Error GoTo 0
End Function

https://www.rondebruin.nl/win/s3/win006_4.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43338431

复制
相关文章
异步fifo的工作原理(netty异步方法)
本次设计主要介绍异步FIFO中读写指针和格雷码的原理及其实现,最后会有代码和仿真文件
全栈程序员站长
2022/07/28
1K0
异步fifo的工作原理(netty异步方法)
java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?
大家好,又见面了,我是你们的朋友全栈君。 你知道java异步调用方法都有哪些吗?下面的文章内容,就对这方面的问题做了一下整理,一起来看看java异步调用的方法吧! 1、利用Spring的异步方法去执行
全栈程序员站长
2022/09/14
4.1K0
动态加载js的异步与同步方法
最近新项目需要根据参数切换js的版本,就需要动态加载js,动态加载js涉及到异步加载与同步加载的问题,所以就封装了一下下面两个方法,以供使用。
用户10106350
2022/10/28
4.9K0
异步提交方法
异步提交的方法有很多种,比如说post、get等等,这些都是很常用的异步提交方法,还有的就是原生JS的提交方法,这个比较复杂。
PHY_68
2020/09/16
1.2K0
异步提交方法
异步模式之工作线程
让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现 就是线程池,也体现了经典设计模式中的享元模式。
一个风轻云淡
2023/10/15
1770
Spring Boot 中如何支持异步方法
要使用 @Async,首先需要使用 @EnableAsync 注解开启 Spring Boot 中的异步特性。
李红
2019/10/14
1.5K0
CA1849:当在异步方法中时,调用异步方法
从任务返回方法调用时,存在 Async 后缀等效项的所有方法都会生成此警告。 此外,调用 Task.Wait()、Task<T>.Result 或 Task.GetAwaiter().GetResult() 将生成此警告。
呆呆
2022/02/26
1K0
【Android 异步操作】AsyncTask 异步任务 ( AsyncTask 异步任务执行方法 execute 方法相关源码解析 )
上一篇博客中 【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 ) , 讲解了 AsyncTask<Params, Progress, Result> 异步任务的构造函数 ;
韩曙亮
2023/03/28
5030
【Flutter】FutureBuilder 异步编程 ( FutureBuilder 构造方法 | AsyncSnapshot 异步计算 )
FutureBuilder 将 异步操作 与 异步 UI 更新 结合在一起 ; 它可以将 异步操作 的结果 , 异步的 更新到 UI 界面中 ;
韩曙亮
2023/03/29
9540
zTree设置异步加载后展开
//不能直接配置展开属性 因为没有数据,需要添加回调函数,异步加载成功展开 callback: { onAsyncSuccess: zTreeOnAsyncSuccess } //异步加载成功回调函数 function zTreeOnAsyncSuccess(event, treeId, treeNode, msg){ $.fn.zTree.getZTreeObj(treeId).expandAll(true); }
河岸飞流
2019/08/09
1.2K0
如何实现异步执行
浏览器和服务器之间只一种面向无连接的HTTP协议进行通讯的,面向无连接的程序的特点是客户端请求服务端,服务端根据请求输出相应的程序,不能保持持久连接。
PM吃瓜
2019/08/12
1.1K0
异步任务如何测试?
收到这样的问题,其实大家的问题都是通用的,那么正好整理下我的一些观点,供参考。
雷子
2022/12/29
9990
ASP.NET 2.0 中的异步页[来自MSDN]
ASP.NET 2.0 提供了大量新功能,其中包括声明性数据绑定和母版页,成员和角色管理服务等。但我认为最棒的功能是异步页,接下来让我告诉您其中的原因。 当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程。一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求。如果一个同步请求成为 I/O 绑定(例如,如果它调用一个远程 Web 服务或查询一个远程数据库,并等待调用返回),那么分配给该请求的线程在调用返回之前处于挂起状态。这影响了可伸缩性,原因是线程池
菩提树下的杨过
2018/01/23
1.9K0
ASP.NET 2.0 中的异步页[来自MSDN]
SpringBoot@Async异步方法
最近呢xxx接到了一个任务,是需要把AOP打印出的请求日志,给保存到数据库。xxx一看这个简单啊,不就是保存到数据库嘛。一顿操作猛如虎,过了20分钟就把这个任务完成了。xxx作为一个优秀的程序员,发现这样同步保存会增加了接口的响应时间。这肯定难不倒xxx,当即决定使用多线程来处理这个问题。终于在临近饭点完成了。准备边吃边欣赏自己的杰作时,外卖小哥临时走来了一句,搞这样麻烦干啥,你加个@Async不就可以了。
不一样的科技宅
2020/07/07
1.4K0
SpringBoot@Async异步方法
如何在SpringBoot中异步请求和异步调用
可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应。
架构师修炼
2020/07/20
2.1K0
如何在SpringBoot中异步请求和异步调用
rabbitmq异步处理_怎么解决js异步方法执行顺序
RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 使用RabbitMQ实现异步更新文章浏览量,提升阅读文章时的响应速度。从直接更新数据库耗时450ms到异步更新数据库耗时50ms,明显提升接口性能,非常的nice~
全栈程序员站长
2022/11/09
2.7K0
rabbitmq异步处理_怎么解决js异步方法执行顺序
Spring开启方法异步执行
@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(Async
Java技术栈
2018/03/30
1.4K0
Spring开启方法异步执行
C# 将 Begin 和 End 异步方法转 task 异步
在 .NET Framework 有两个不同的异步方法,一个是 Asynchronous Programming Model (APM) 另一个是 Task-based asynchronous pattern (TAP) 说 APM 和 TAP 估计大家都不认识。其实 APM 就是有成对的 Begin 和 End 方法的异步,而 TAP 就是使用 async 和 await 的异步
林德熙
2022/08/04
6550
Spring认证指南|了解如何创建异步服务方法。
本指南将指导您创建对 GitHub 的异步查询。重点是异步部分,这是扩展服务时经常使用的功能。
IT胶囊
2022/04/02
6670
Spring认证指南|了解如何创建异步服务方法。
如何在SpringBoot中异步请求和异步调用
链接 | cnblogs.com/baixianlong/p/10661591.html
JavaFish
2020/02/19
1.7K0
如何在SpringBoot中异步请求和异步调用

相似问题

SQL -按id计数

35

SQL按情况排序+按ID排序

10

SQL按ID获取一列中的差异

11

SQL Server按每个ID获取不同的名称计数

430

按ID获取项目

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档