Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用vba仅在受此过滤器影响的单元格中粘贴过滤值?_Excel_Vba_Copy_Paste - Fatal编程技术网

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:是的,你的评论很中肯,谢谢!我只是试着快速适应