excel - 使用 VBA 过滤表并将某些列复制到新工作表
问题描述
我有一个名为“组合”的表,它存储在工作簿的一张纸上。
在第二张纸上,我有以下单元格范围(在C1:F2
)
Delivery | Column Ref | Column Ref | Available
Delivery ID | I | J | YES
我希望能够使用 VBA 根据此单元格范围中的值过滤表格
数据下拉列是一个带有下拉列表的单元格,VLOOKUP
用于填充两列参考单元格。这是需要过滤的两列。
列I
需要显示所有行,<>"X"
而列J
需要显示与可用列中的值相等的所有行。
然后我需要能够将 columns和出现在第一个参考单元格中的列A
复制到第二张表中的单元格。G
A5
是否可以使用 VBA 做到这一点?我一直在尝试使用 IF 语句来做到这一点,但它非常混乱。
我有一段代码试图从这里修改
Sub Sample()
Dim ws As Worksheet, wsTemp As Worksheet
Dim rRange As Range, rngToCopy As Range
Dim lRow As Long
Dim lRow2 As Long
Dim lCol As Long
'Find the last non-blank cell in column A(1)
lRow2 = Cells(Rows.Count, 1).End(xlUp).Row
'~~> Change this to the relevant sheet
Set ws = ThisWorkbook.Sheets("Combined")
With ws
'~~> Set your range for autofilter
Set rRange = .Range("A1:AR" & lRow2)
'~~> Remove any filters
.AutoFilterMode = False
'~~> Filter, copy visible rows to temp sheet
With rRange
.AutoFilter Field:=9, Criteria1:="X"
'~~> This is required to get the visible range
ws.Rows("1:lRow2").EntireRow.Hidden = True
Set rngToCopy = .SpecialCells(xlCellTypeVisible).EntireRow
Set wsTemp = Sheets.Add
rngToCopy.Copy wsTemp.Range("A1")
'~~> Unhide the rows
ws.Rows("1:lRow").EntireRow.Hidden = False
End With
'~~> Remove any filters
.AutoFilterMode = False
End With
Application.DisplayAlerts = False
wsTemp.Delete
Application.DisplayAlerts = True
End Sub
但我不知道如何修改该With rRange
部分以满足我的需要(即 Column I <>"X" and column J=F2
此外,这条线 ws.Rows("1:lRow2").EntireRow.Hidden = True
给了我一个类型不匹配的错误
更新
Sub AddFilter()
'
' AddFilter Macro
'
Dim rCrit1 As Range, rCrit2 As Range, rCrit3 As Range
Dim copyRange1 As Range, copyRange2 As Range, copyRange3 As Range
Dim filterRange As Range
Dim lastRow As Long
Set src = ThisWorkbook.Sheets("Combined")
Set tgt = ThisWorkbook.Sheets("Dashboard")
lastRow = src.Range("A" & src.Rows.Count).End(xlUp).Row
Set filterRange = src.Range("A1:Z" & lastRow)
Set copyRange1 = src.Range("A2:A" & lastRow)
Set copyRange2 = src.Range("G2:G" & lastRow)
Set copyRange3 = src.Range("I2:I" & lastRow)
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set rCrit1 = Worksheets("Dashboard").Range("Ref_1")
Set rCrit2 = Worksheets("Dashboard").Range("Ref_2")
Set rCrit3 = Worksheets("Dashboard").Range("Ref_3")
Sheets("Dashboard").Range("A1:C3").ClearContents
Sheets("Dashboard").Range("A1:C3").ClearFormats
Selection.AutoFilter
filterRange.AutoFilter Field:=rCrit1, Criteria1:="<>X"
filterRange.AutoFilter Field:=rCrit2, Criteria1:=rCrit_3
copyRange1.SpecialCells(xlCellTypeVisible).Copy tgt.Range("A5")
copyRange2.SpecialCells(xlCellTypeVisible).Copy tgt.Range("B5")
copyRange3.SpecialCells(xlCellTypeVisible).Copy tgt.Range("C5")
End Sub
但是 filterRange.Autofilter 行没有正确读取 rCrit_3 值,因此没有基于此进行过滤(Ref_3 是一个命名范围,其中包含问题第一部分中的 YES 单元格)。
此外,copyRange 行给了我“1004”运行时错误,但如果我最小化电子表格并从 VBA 窗口运行代码,它将无错误地运行。
任何人都可以对这些问题有所了解吗?
解决方案
推荐阅读
- angular - 如何从 Angular 7 查询 Spring Boot 服务器
- mysql - SQL 在插入后触发器中创建事件
- javascript - 如何在 React-Native 的自定义抽屉导航中显示标题图像和文本?
- c++ - * vs & Arduino类
- python - 处理非常大的python dict时如何节省RAM?
- android - 如何从 C++ Windows 桌面应用程序将数据写入通过 USB 连接的 Android 手机
- ios - 使用 RCT_EXPORT_METHOD 语法时,如何修复 Xcode 上的“忽略方法主体之前的分号”错误?
- angular - Angular/RxJS - 嵌套 Observable - 重构语句
- django - Django请求会话未与登录用户模型链接
- c - 在结构数组之后打印一个字符