Excel 如何使用vba仅在受此过滤器影响的单元格中粘贴过滤值?
我目前正在处理一个宏,它当前根据一个值过滤一个表,然后在应用过滤器后复制列下的数据(使其工作)。但是,我不知道如何将这些值粘贴到同一个表中,覆盖不同列中可见单元格下的数据。正在复制以红色突出显示的值(图片),现在我只需要将它们粘贴到以黄色突出显示的单元格中。谢谢大家!Excel 如何使用vba仅在受此过滤器影响的单元格中粘贴过滤值?,excel,vba,copy,paste,Excel,Vba,Copy,Paste,我目前正在处理一个宏,它当前根据一个值过滤一个表,然后在应用过滤器后复制列下的数据(使其工作)。但是,我不知道如何将这些值粘贴到同一个表中,覆盖不同列中可见单元格下的数据。正在复制以红色突出显示的值(图片),现在我只需要将它们粘贴到以黄色突出显示的单元格中。谢谢大家! Public Sub DxcDateUpdate() Application.ScreenUpdating = False Dim Mwb As Workbook Dim ws As Worksheet Set Mwb = Th
Public Sub DxcDateUpdate()
Application.ScreenUpdating = False
Dim Mwb As Workbook
Dim ws As Worksheet
Set Mwb = ThisWorkbook
Set ws = Mwb.Worksheets("Commission")
Set ws2 = Mwb.Worksheets("test")
lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ws.Range("A1").AutoFilter Field:=31, Criteria1:="DXC/TPV.com Enrollment"
ws.Range("AG2:AG" & lr).SpecialCells(xlCellTypeVisible).Copy Destination:=ws.Range '''here is where idk what to do?'''
Application.ScreenUpdating = True
End Sub
不能将不连续的范围粘贴为不连续。您应该在每个范围单元格之间迭代并使用偏移量复制它,或者使用
c.row
构建要粘贴的范围。请尝试下一个改编代码:
Sub DxcDateUpdate()
Dim Mwb As Workbook, ws As Worksheet, rngVis As Range, c As Range, LR As Long
Set Mwb = ThisWorkbook
Set ws = Mwb.Worksheets("Commission")
Set ws2 = Mwb.Worksheets("test")
LR = ws.cells(ws.rows.Count, 1).End(xlUp).row
ws.Range("A1").AutoFilter field:=31, Criteria1:="DXC/TPV.com Enrollment"
Set rngVis = ws.Range("AG2:AG" & LR).SpecialCells(xlCellTypeVisible)
For Each c In rngVis.cells
c.Offset(0, -28).value = c.value
Next
End Sub
当然,为了使代码更快,您应该使用一些优化行(ScreenUpdate=False,EnableEvents=False,Calculation=xlCalculationManual,后跟
True
,True
,xlCalculationAutomatic
)。您不能将不连续的范围粘贴为不连续。您应该在每个范围单元格之间迭代并使用偏移量复制它,或者使用c.row
构建要粘贴的范围。请尝试下一个改编代码:
Sub DxcDateUpdate()
Dim Mwb As Workbook, ws As Worksheet, rngVis As Range, c As Range, LR As Long
Set Mwb = ThisWorkbook
Set ws = Mwb.Worksheets("Commission")
Set ws2 = Mwb.Worksheets("test")
LR = ws.cells(ws.rows.Count, 1).End(xlUp).row
ws.Range("A1").AutoFilter field:=31, Criteria1:="DXC/TPV.com Enrollment"
Set rngVis = ws.Range("AG2:AG" & LR).SpecialCells(xlCellTypeVisible)
For Each c In rngVis.cells
c.Offset(0, -28).value = c.value
Next
End Sub
当然,为了使代码更快,您应该使用一些优化行(ScreenUpdate=False、EnableEvents=False、Calculation=xlCalculationManual,后跟True
、True
、xlCalculationAutomatic
)。使用数组复制“筛选”值
- 下面将循环遍历“条件”列以查找条件(字符串)。在同一行中找到时,源列中的值将复制到目标列
- 将列的值写入数组以加快进程(循环)
选项显式
子DxcDateUpdate()
Const wsName As String=“佣金”
长度=2时的常数
常量cCol为String=“AE”标准
Const sCol As String=“AG”源
Const dCol As String=“E”目标
常量标准为String=“DXC/TPV.com注册”
将wb设置为工作簿:设置wb=ThisWorkbook
将ws设置为工作表:设置ws=wb.Worksheets(wsName)
变暗rg为范围:设置rg=ws.Range(“A1”).CurrentRegion
变暗lRow为Long:lRow=rg.Rows.Count
Dim cData作为变量:cData=rg.Columns(cCol).Value
作为变量的Dim sData:sData=rg.Columns(sCol).Value
带有rg.Columns(dCol)
将dData作为变量进行调整:dData=.Value
变暗,变长
对于r=从前到后
如果cData(r,1)=标准,则
dData(r,1)=sData(r,1)
如果结束
下一个r
.Value=dData
以
端接头
使用数组复制“筛选”值
- 下面将循环遍历“条件”列以查找条件(字符串)。在同一行中找到时,源列中的值将复制到目标列
- 将列的值写入数组以加快进程(循环)
选项显式
子DxcDateUpdate()
Const wsName As String=“佣金”
长度=2时的常数
常量cCol为String=“AE”标准
Const sCol As String=“AG”源
Const dCol As String=“E”目标
常量标准为String=“DXC/TPV.com注册”
将wb设置为工作簿:设置wb=ThisWorkbook
将ws设置为工作表:设置ws=wb.Worksheets(wsName)
变暗rg为范围:设置rg=ws.Range(“A1”).CurrentRegion
变暗lRow为Long:lRow=rg.Rows.Count
Dim cData作为变量:cData=rg.Columns(cCol).Value
作为变量的Dim sData:sData=rg.Columns(sCol).Value
带有rg.Columns(dCol)
将dData作为变量进行调整:dData=.Value
变暗,变长
对于r=从前到后
如果cData(r,1)=标准,则
dData(r,1)=sData(r,1)
如果结束
下一个r
.Value=dData
以
端接头
更具可读性(可维护性)的是c.EntireRow.Columns(“E”).Value=c.Value
。为了加快速度,您应该考虑遍历以下区域:RNGVIS中的每个C <代码>。将End If
替换为Next c
。考虑删除之前和之后的任何过滤器:<代码> WS.AutoFultMydio= false 。@ VBASIC2008感谢您的第二个选项!我肯定会把它添加到注释中,因为它更容易理解。FaneDuru-只是为了确定,我把它改成了“Next c”,而不是“End If”,因为它给了我一个错误。它正在做它现在应该做的事情,但我所做的是正确的吗?@VBASIC208:是的,你的评论很中肯,谢谢!我只是试着快速修改他的代码,以便做(我理解)他需要的事情。我在离开办公室之前做的,当然不是测试。现在更正。我在第一条评论的“区域”部分使用了您的变量名,让您知道迭代区域不需要迭代它们的单元格,也就是说,只需将.cells
替换为.areas
。更具可读性(可维护性)的是c.EntireRow.Columns(“e”).Value=c.Value
。为了加快速度,您应该考虑遍历以下区域:RNGVIS中的每个C <代码>。将End If
替换为Next c
。考虑删除之前和之后的任何过滤器:<代码> WS.AutoFultMydio= false 。@ VBASIC2008感谢您的第二个选项!我肯定会把它添加到注释中,因为它更容易理解。FaneDuru-只是为了确定,我把它改成了“Next c”,而不是“End If”,因为它给了我一个错误。它正在做它现在应该做的事情,但我所做的是正确的吗?@VBASIC208:是的,你的评论很中肯,谢谢!我只是试着快速适应