复制可见单元格以将 listobject 过滤后的数据提取到新工作簿

2024-03-27

我正在尝试将 listobject 过滤数据提取到新工作簿中。但是,会提取所有数据,而不仅仅是过滤后的数据。

Set loop_obj = wsCopy.ListObjects(1)
loop_obj.AutoFilter.ShowAllData

ColNum = Application.WorksheetFunction.Match("DateOrder", wsCopy.Rows(1), 0)

With loop_obj
    .Range.AutoFilter Field:=ColNum, Criteria1:=">=0"
End With

'Add Copy Values to Array
Set loop_copy = loop_obj.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
arr = loop_copy.CurrentRegion.Offset(1, 0)
aRws = Evaluate("Row(1:" & UBound(arr) & ")")
arr = Application.Index(arr, aRws, Array(1, 2, 3, 4, 5))

'Create New Workbook with a Blank Worksheet
wb.Worksheets.Add.Move
Set wb_new = ActiveWorkbook
Set wsDest = ActiveWorkbook.ActiveSheet
  
'Perform Paste Operations
Set loop_paste = wsDest.Range("A1")
loop_paste.Resize(UBound(arr, 1), UBound(arr, 2)).value = arr

With wsDest
    .Range(Cells(1, DateNum), Cells(1200, DateNum)).NumberFormat = "[$-en-US]d-mmm-yy;@"
    .Parent.SaveAs FileName:=dFilePath, FileFormat:=xlCSVUTF8
    .Parent.Close True
End With

loop_obj.AutoFilter.ShowAllData

这对我有用(只需根​​据列索引数组复制每一列):

Sub tester()
    
    Dim wsCopy As Worksheet, loop_copy As Range
    Dim loop_obj As ListObject, colnum As Long
    Dim col, visRows As Long, rngDest As Range, i As Long
    
    Set wsCopy = Sheets("Details")

    Set loop_obj = wsCopy.ListObjects(1)
    loop_obj.AutoFilter.ShowAllData
    
    colnum = Application.Match("DateOrder", loop_obj.HeaderRowRange, 0)
    
    If IsError(colnum) Then
        MsgBox "Header not found!"
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    loop_obj.Range.AutoFilter Field:=colnum, Criteria1:=">=0"
    
    On Error Resume Next 'in case no visible rows to count
    visRows = loop_obj.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count
    On Error GoTo 0
    
    If visRows > 0 Then
        Set rngDest = Sheets("destination").Range("B2")
        i = 0
        For Each col In Array(1, 2, 3, 4, 5)
            loop_obj.DataBodyRange.Columns(col).SpecialCells(xlCellTypeVisible).Copy
            rngDest.Parent.Paste Destination:=rngDest.Offset(0, i)
            i = i + 1
        Next col
    End If
    
    loop_obj.AutoFilter.ShowAllData

End Sub

编辑:一种不同的基于数组的方法 - 这更快,但同样更复杂,所以需要权衡。

Sub Tester()
    
    Dim wsCopy As Worksheet, loop_copy As Range
    Dim loop_obj As ListObject, colnum As Long
    Dim col, visRows As Long, rngDest As Range, i As Long, data
    
    Set wsCopy = Sheets("Details")

    Set loop_obj = wsCopy.ListObjects(1)
    loop_obj.AutoFilter.ShowAllData
    
    colnum = Application.Match("DateOrder", loop_obj.HeaderRowRange, 0)
    
    If IsError(colnum) Then
        MsgBox "Header not found!"
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    loop_obj.Range.AutoFilter Field:=colnum, Criteria1:=">=0"
    
    data = arrayFromVisibleRows(loop_obj.DataBodyRange)
    If Not IsEmpty(data) Then
        With Sheets("Destination").Range("B2")
            .CurrentRegion.ClearContents
            .Resize(UBound(data, 1), UBound(data, 2)).Value = data
        End With
    End If
    
    loop_obj.AutoFilter.ShowAllData

End Sub

'Return a 2D array using only visible row in `rng`
'  Optionally include only column indexes in `cols` (passed as a 1D array)
Function arrayFromVisibleRows(rng As Range, Optional cols As Variant = Empty)
    Dim rngVis As Range, data, dataOut
    Dim rw As Long, col, e, c As Range, cOut As Long, rOut As Long, srcRow As Long
    
    On Error Resume Next
    Set rngVis = rng.Columns(1).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    
    If Not rngVis Is Nothing Then
        data = rng.Value 'read all the range data to an array
        If IsEmpty(cols) Then
            'create an array with all column indexes if none were provided
            cols = Application.Transpose(Evaluate("=ROW(1:" & rng.Columns.Count & ")"))
        End If
        'size the output array
        ReDim dataOut(1 To rngVis.Cells.Count, 1 To (UBound(cols) - LBound(cols)) + 1)
        rOut = 1
        For Each c In rngVis.Cells
            cOut = 1
            srcRow = 1 + (c.Row - rng.Cells(1).Row)
            For Each col In cols 'loop the required columns
                dataOut(rOut, cOut) = data(srcRow, col)
                cOut = cOut + 1
            Next col
            rOut = rOut + 1
        Next c
        arrayFromVisibleRows = dataOut
    Else
        arrayFromVisibleRows = Empty
    End If
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复制可见单元格以将 listobject 过滤后的数据提取到新工作簿 的相关文章

  • Excel VBA:通过快捷键运行打开文档后宏挂起,但从 VB 编辑器运行完美

    我遇到了一个奇怪的问题 我决定分配一个键盘快捷键Ctrl Shift P我的 VBA 例程之一 该例程假设打开一个现有的 Excel 工作簿 复制一些信息并 SaveAs另一个名字 当我在 Visual Basic 编辑器中点击 播放 时
  • 使用 Apache POI 将结果集转换为 Excel (*.xlsx) 表

    我正在尝试写结果集到 Excel xlsx 表使用 Apache Poi Office Excel 中的无效表对象错误 但是 即使它写入 Excel 文件时没有任何错误 但当我尝试在 Office Excel 2013 中打开它时 它会显示
  • 防止 Excel 公式中的单元格数量增加

    我在 Excel 中有一个公式 需要根据该行中的数字除以一个常数对该列的几行运行 当我复制该公式并将其应用于范围中的每个单元格时 所有单元格编号都会随行增加 包括常量 所以 B1 127 C4 IF B4 lt gt B4 B1 如果我复制
  • 将数据从 Excel 导出到 Outlook

    我已经用 Excel 起草了一封电子邮件 其中填充了数据表中的信息 单元格 A1 到 A4 包含 嗨 希望你做得好 和消息 等等 A5到H10有一个包含信息的表格 A11到A30有类似 期待您的回复 的电子邮件内容 我只想复制 A1 A4
  • Rails 4/5 发送动态 ActionMailer::Base.mail 电子邮件,附件标记为 Noname

    我看过类似的帖子 主要涉及通过创建视图和控制器来发送附件 例如 电子邮件中的 PDF 附件称为 Noname https stackoverflow com questions 12816042 pdf attachment in emai
  • 从多页表单中获取活动控件名称和值

    我已经在网上寻找解决方案几个月了 但没有成功 我创建于Excel 2010 a UserForm与多页 我正在尝试编写一个函数来获取activecontrol名称和值 到目前为止 我已经成功使用此命令获取了控件的名称Me MultiPage
  • Excel Active-X 按钮无法单击

    我有一个在 Excel 中应该可以点击的按钮 当我尝试单击它时 什么也没有发生 我注意到 如果我单击并按住右下角的鼠标 则会出现第二个按钮 这种情况过去发生过 当我移动鼠标单击该按钮时 我可以单击 一切都会正常 但这一次 当我移动鼠标时 按
  • 您可以使用 Openpyxl 将全名拆分为名字和姓氏吗?

    我有一个 Excel 文件 我一直在尝试使用 openpyxl 将列 全名 拆分为两个单独的名字和姓氏列 例如 我有 from openpyxl import Workbook load workbook wb load workboo p
  • 数据透视和运行时错误 1004:应用程序定义或对象定义的错误

    我对宏和 VBA 编码很陌生 我正在尝试创建一个非常简单的宏 它从包含 33 列的表中获取数据并将其转换为数据透视表 只有最后 3 列 31 32 33 包含数字 我需要将其显示在枢轴上 因为我想比较当前月份 上个月以及逐月的变动 到目前为
  • VBA 下标超出工作簿名称范围

    我从网上拉了一些代码来打开文件夹中的最新文件 这似乎工作得很好 然而 在代码的后面 我添加了一行附加行来设置最近打开的同一文件 尝试此操作时 工作簿 subscipt 超出范围 我认为这与语法有关 可能需要在工作簿名称中添加额外的引号 有什
  • 连接两列之间的排列

    我需要有关 Excel 作业的帮助 Name City John London Maxx NY Ashley DC Paris 解决这个问题的方法必须是 John london John NY John DC John Paris Maxx
  • 如何让 selenium 等待页面在 Selenium - Excel VBA 包装器中完全加载?

    Selenium Excel VBA 的包装器使用什么代码或函数 以便程序将等待页面完全加载然后执行其他命令 最新版本在执行所需操作之前隐式等待目标元素存在 例如 driver FindElementById Click 默认情况下会在抛出
  • Word VBA“项目不可见”

    有谁知道如何使模板在 Word 2007 中可见 我创建了一个模板 Experiments dotm 使用加载项添加它 但是当我尝试在其中创建模块时 收到错误消息 项目无法查看 关于 项目无法查看 问题的解释可以参见here http ms
  • Excel VBA 最终用户选择图表对象

    我想生成一些代码 允许最终用户从工作表中选择多个图表之一 之后我将根据该选择进行一系列操作 我正在寻找类似于 Application Inputbox Type 8 的东西 它允许对象选择而不是范围选择 我对不起眼的老VBA要求太多了吗 首
  • 有没有办法设置一个变量一次并在多个地方使用它而不给它模块级别的范围?

    我有一个循环将用户窗体控件添加到集合中 由于多个地方都需要该集合 因此我将其放入模块中并在需要时调用它 这意味着该集合仅在需要时才位于内存中 但这也意味着我每次想要使用它时都会运行一个循环 I could已给出集合模块级别范围并在第一次需要
  • VBA:访问 JSON

    我正在处理 VBA 投影 但不确定如何访问此 JSON 中的 id 应该将 players 设置为什么才能在循环中获取 id 我已经用更多代码更新了问题 JSON event games players id 182759 Code Pri
  • 在函数上使用子例程的目的

    我已经使用 Access 一段时间了 尽管我了解 Function 相对于 Sub 的明显好处是它可以返回值 但我不确定为什么我应该使用 Sub 而不是一个函数 毕竟 除非我弄错了 函数可以做所有 Subs 可以做的事情吗 注意 我完全知道
  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • 为什么 Excel 有时会在工作表名称中添加 $?

    我有时但并非总是发现 Excel 会放置一个 位于工作表名称末尾 但在 Excel 中看不到 只有在尝试使用 C 将其导入 SQL Server 时才可见 我遇到过很多不同的情况 它保留了原始工作表 但也创建了第二个空的 隐藏 工作表 其中
  • 在 OpenXML 中应用数字格式

    我正在尝试使用 OpenXML 从头开始 创建 Excel 电子表格 并且一切正常 将实际值转储到实际单元格中 但现在我正在尝试将数字格式应用于列 但遇到了问题 我有styles xml看起来像这样

随机推荐

  • DRF Serializer - 如何返回外键字段?

    早上好 我真的很难解决从 Django Rest Framework API 返回值的问题 我有两个模型 SirTarget 和 Status SirTarget 就像一张票证 而 Status 是票证的文本状态标签 对应于处理票证的阶段
  • 来自 Properties 的 C# 自定义属性

    所以我有一个来自我的类 的属性集合 我想循环遍历它 对于每个属性 我可能有自定义属性 因此我想循环遍历这些属性 在这种特殊情况下 我的城市类别有一个自定义属性 public class City ColumnName OtroID publ
  • Swift / SKStoreProductViewController PushViewController 结果为(lldb)

    为了将用户推送到 iTunes 商店获取所需的项目 我使用以下函数 func openStoreProductWithiTunesItemIdentifier identifier String let storeViewControlle
  • 使用 pytest-django 进行测试期间,Django 连接对象看不到第二个数据库的表

    底线 在使用 pytest django 进行测试期间 我的 Django 连接对象看不到第二个数据库的表关系 概述 我有一个问题 我的 Django 连接对象似乎获取了错误的数据库信息 当我查询 客户 数据库中的表时 我偶然发现了这个问题
  • 文本编辑器的动态高度

    我正在努力适应TextEditor里面一个ScrollView 有没有办法制作TextEditor只占用适合所有文本所需的空间 或者简单地说 如何改变height of the TextEditor动态地适应所有文本 你可以把它放在一个ZS
  • 取消 AJAX 请求会减慢后续导航速度

    在我的应用程序中 当用户请求报告时 jquery AJAX 使用 load 调用一个执行大量数字运算和 mySQL 请求的文件 加载一般需要5 6秒 ajaxStart and ajaxStop 用于在加载期间显示加载 gif 问题 如果用
  • 为什么我的 CompletableFuture 代码可以在 Java 8 中运行,但不能在 Java 11 中运行?

    为什么这段代码在 Java 8 和 Java 11 中的行为不同 private static String test2 CompletableFuture runAsync gt IntStream rangeClosed 1 20 fo
  • 使用布局将面板设置在屏幕中央

    我尝试使用以下方法将子面板的位置设置在父面板的中心 parent panel setLayout new BorderLayout parent panel add child panel BorderLayout CENTER 但它被添加
  • Python 类成员

    我刚刚学习 Python 并且有 C 背景 所以如果我对两者有任何困惑 混淆 请告诉我 假设我有以下课程 class Node object def init self element self element element self l
  • MVC 中间件检查控制器方法的属性

    我正在使用 asp net core mvc 在默认身份验证旁边 我添加了非常具体的授权 这是通过使用完成的ResultFilterAttribute属性 将来 为了确保开发人员为每个控制器方法指定权限 我想在执行操作之前检查是否为方法设置
  • 查询中的mysql语法错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我收到错误查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 5 行 5 7 6 9 1
  • Nuxtjs:如何使用 HttpOnly Cookie 进行 Nuxt-Auth 策略

    我之前使用过 Vuejs 并决定研究一下 NuxtJs 在我以前的应用程序中 我的服务器发送了一个我的客户端无法读取的 HttpOnly cookie 因此 对于身份验证 我尝试了 NuxtAuth 它有一些策略 我注意到不可能使用 Htt
  • Android WebView 中的编程点击

    我有一个网站href其中将我重定向到 https a href class login link link private cab link i class icon user i a 所以 我可以通过 JavaScript 点击它 它在
  • maxima:使用函数作为函数参数

    就像标题所说 我想使用函数作为函数参数 直觉上我尝试了类似的东西 a t c t c b R 11 R 12 R 13 d 1x d 1y d 1z R 11 d 1x R 12 d 1y R 13 d 1z f a t c b R 11
  • 如何使用特定的“hd”(托管域)参数配置 Firebase + Google OAuth?

    我正在将 Firebase 与 Google 身份验证提供商一起使用 在其他应用程序中使用 Google OAuth 时 我可以将身份验证配置为仅限于特定域 Google OpenID Connect 文档详细介绍了用于此功能的 hd 参数
  • 如何生成一个“私有 URL”,在安全性和便利性之间实现最先进的平衡?

    我在哪里可以找到有关 私有 URL 的写得很好 深入的技术讨论 例如 Google 文档中使用的 知道链接的任何人 我正在寻找诸如生成链接的算法和实现 它使用的 ID 空间的大小 安全影响的分析以及为了方便而在安全性方面做出的务实妥协等主题
  • 单击链接/按钮时更改 div 的内容

    基本上我有一个网页 有一个 div id content 和一个 div id sidebar 我想做的是在侧边栏中单击链接 按钮时更改内容 div 中的内容 而不需要为每篇文章提供单独的页面 原因是 我正在为一些多个乐队做一个 BIO 页
  • Xamarin.UITests - 在真实设备上测试 - iOS - 应用程序权限弹出问题

    我的 iOS 应用程序需要一些权限 GPS 推送通知 当应用程序第一次启动时 iOS 会询问用户是否同意向应用程序授予这些权限 我已经编写了一些 UITest 并希望在本地连接的 iPhone 上自动运行它们 问题是我无法覆盖权限问题并且我
  • python int() 函数

    如果是小数 下面的代码会显示错误 例如49 9 被发送到next多变的 你能告诉我为什么吗 为什么int 将其转换为整数 next raw input gt how much int next if how much lt 50 print
  • 复制可见单元格以将 listobject 过滤后的数据提取到新工作簿

    我正在尝试将 listobject 过滤数据提取到新工作簿中 但是 会提取所有数据 而不仅仅是过滤后的数据 Set loop obj wsCopy ListObjects 1 loop obj AutoFilter ShowAllData