Excel VBA 按钮。将行从 Sheet1 复制到 Sheet2 / 条件:列值

帕维尔

我正在使用下面的代码将行从 Sheet1 复制到 Sheet2。我有3个问题。

  1. 为什么这个函数总是复制A2行?即使值为“0”。
  2. 如何只复制值,而不复制格式?
  3. 复制时是否可以跳过B列?Sheet1 中的“C”将是 Sheet2 中的“B”,依此类推。
Sub COPY_SA()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range, rngToCopy As Range
Dim lastrow As Long
'change Sheets to suit
Set ws1 = ThisWorkbook.Worksheets("SA")
Set ws2 = ThisWorkbook.Worksheets("JC_input")

With ws1
    'assumung that your data stored in column A:D, Sheet1
    lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A2:D" & lastrow)
    'clear all filters
    .AutoFilterMode = False
    With rng
        'apply filter
        .AutoFilter Field:=4, Criteria1:=">0"
        On Error Resume Next
        'get only visible rows
        Set rngToCopy = .SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    'copy range
    If Not rngToCopy Is Nothing Then rngToCopy.CopyDestination:=ws2.Range("A2")
    'clear all filters
    .AutoFilterMode = False
End With
Application.CutCopyMode = False End Sub

我设法修改如下。工作表“ws1”中的范围仍然存在问题。无法在第二行设置过滤器并从第 3 行复制范围。这就是添加:“ws2.Rows(3).Delete”的原因。代码总是复制第 1 行。第 1 行有一些注释。第 2 行获得列名。

Sub COPY_SA()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range, rngToCopy As Range
Dim lastrow As Long
'change Sheets to suit
Set ws1 = ThisWorkbook.Worksheets("SA")
Set ws2 = ThisWorkbook.Worksheets("JC_input")

With ws1
    'assumung that data stored in column C:E, Sheet1
    lastrow = .Cells(.Rows.Count, "C").End(xlUp).Row
    'can not make range from row 3 ???
    Set rng = .Range("C1:E" & lastrow)
    'clear all filters
    .AutoFilterMode = False
    With rng
        'apply filter with criteria in column 3 of range C:E
        'can not make filter in row 2 ???
        .AutoFilter Field:=3, Criteria1:=">0"
        On Error Resume Next
        'get only visible rows
        Set rngToCopy = .SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    'copy range
    If Not rngToCopy Is Nothing Then rngToCopy.Range("A:C").Copy
    'paste from row 3
    ws2.Range("A3").PasteSpecial Paste:=xlValues
    'delete no needed row
    ws2.Rows(3).Delete
    'clear all filters
    .AutoFilterMode = False
    End With
Application.CutCopyMode = False
  If Not ActiveSheet.AutoFilterMode Then
    ws1.Range("2:2").AutoFilter
    End If
End Sub
合资企业

试试这个快速修复,假设你在两张表上的标题都在第一行:

Sub COPY_SA()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range, rngToCopy As Range
Dim lastrow As Long
'change Sheets to suit
Set ws1 = ThisWorkbook.Worksheets("SA")
Set ws2 = ThisWorkbook.Worksheets("JC_input")

With ws1
    'assumung that your data stored in column A:D, Sheet1
    lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:D" & lastrow)
    'clear all filters
    .AutoFilterMode = False
    With rng
        'apply filter
        .AutoFilter Field:=4, Criteria1:=">0"
        On Error Resume Next
        'get only visible rows
        Set rngToCopy = .SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    'copy range
    If Not rngToCopy Is Nothing Then rngToCopy.Range("A:A,C:D").Copy
    ws2.Range("A1").PasteSpecial Paste:=xlValues
    'clear all filters
    .AutoFilterMode = False
End With
Application.CutCopyMode = False

End Sub

回答您的问题:

  1. 为什么这个函数总是复制A2行?即使值为“0”。

那是因为您已经设置了从第二行开始的范围并对其应用了过滤器。

我们可以在代码中通过设置范围来更改它,A1:D & Lastrow并将其粘贴到ws2.Range("A1").

  1. 如何只复制值,而不复制格式?

是的,这是可能的,但您需要xlValues按照@Peh here 的解释进行复制和粘贴

因此,代码中的更改是针对.Copy一个范围,而在下一行.PasteSpecialxlValues

  1. 复制时是否可以跳过B列?Sheet1 中的“C”将是 Sheet2 中的“B”,依此类推。

是的,而不是复制整个范围,我们可以指定您要复制的列,这可以是非连续的列范围。

我们可以更改.Copy部分以仅包含我们需要的这些特定列。


我相信整个事情可以写得更整洁,但这至少应该做你所追求的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel Online-将日期从Sheet1列A复制到Sheet2列B

来自分类Dev

根据单元格条件将Sheet1的活动行复制到Sheet2并避免重复

来自分类Dev

Excel VBA-在sheet2中查找字符串,并将其复制到sheet1中

来自分类Dev

获取 sheet1 中最后填充的列并将 sheet2 中的数据复制到 sheet1

来自分类Dev

根据标题将数据从Sheet1复制到Sheet2

来自分类Dev

根据标题将数据从Sheet1复制到Sheet2

来自分类Dev

在sheet1的所有行和列中搜索字符串,如果发现则将整个行复制到sheet2

来自分类Dev

使用规则自动将单元格从 Sheet2 复制到 Sheet1 上的自定义列

来自分类Dev

将行复制到sheet2的值在范围内

来自分类Dev

如果它们匹配,我需要将 Sheet1 Column A 与 Sheet2 Column A 匹配,然后将 Sheet2 Column B 复制到 Sheet1 Column I

来自分类Dev

根据Excel中sheet1中的行数在sheet2中创建列

来自分类Dev

如何将数据从 sheet1 中的范围复制到 sheet2 5 次,直到到达空单元格?

来自分类Dev

Excel:如何根据 sheet1 中的值是否与 sheet2 中的值匹配来对 sheet2 中的值求和

来自分类Dev

如何将sheet1仅包含正值的那些行反映到sheet2中?

来自分类Dev

excel比较sheet1中的当前时间值与sheet2中的时间值范围

来自分类Dev

将数据从Sheet1复制并粘贴到Sheet2,然后删除输入的数据而不删除Sheet1中的功能

来自分类Dev

如果Sheet1 A包含Sheet2 C的一部分,则复制行

来自分类Dev

Excel VBA:我试图将具有某种条件的sheets1中的数据与sheet2中的数据进行比较,并且仅将不匹配的数据传输到sheet2中

来自分类Dev

Google脚本,如何使用正则表达式将一行从Sheet1复制到Sheet2,而不是仅复制一个单元格?

来自分类Dev

Excel:当Sheet 1的行数可变时,尝试合并Sheet1的加权平均数据并汇总到Sheet2

来自分类Dev

当Sheet1 A1:A2更改时,自动将Sheet 1 A1:A2复制到Sheet 2 A1:A2

来自分类Dev

如何在Sheet1的A列中标识不同的单词(每行或每个单元格一个单词),然后将这些行复制并粘贴到Sheet2

来自分类Dev

Excel,找到{max(sum(Sheet1(A)+ Sheet2(A)+ Sheet3(A))}公式的行,而在任何表中都没有总和

来自分类Dev

如果在sheet2中不存在从sheet1复制到sheet2的单元格

来自分类Dev

将满足条件的数组值复制到另一列excel vba

来自分类Dev

比较sheet1中sheet2中缺少的行,并在有条件的sheet3中显示它们

来自分类Dev

如何在sheet2中给定单元格值的情况下迭代sheet1中的行,并将sheet1中的行替换为sheet 2中的行?

来自分类Dev

Google脚本-将SheetC数据从Sheet21复制到columnC Sheet2(如果Sheet2中尚不存在)

来自分类Dev

Excel VBA将范围值复制到数组,

Related 相关文章

  1. 1

    Excel Online-将日期从Sheet1列A复制到Sheet2列B

  2. 2

    根据单元格条件将Sheet1的活动行复制到Sheet2并避免重复

  3. 3

    Excel VBA-在sheet2中查找字符串,并将其复制到sheet1中

  4. 4

    获取 sheet1 中最后填充的列并将 sheet2 中的数据复制到 sheet1

  5. 5

    根据标题将数据从Sheet1复制到Sheet2

  6. 6

    根据标题将数据从Sheet1复制到Sheet2

  7. 7

    在sheet1的所有行和列中搜索字符串,如果发现则将整个行复制到sheet2

  8. 8

    使用规则自动将单元格从 Sheet2 复制到 Sheet1 上的自定义列

  9. 9

    将行复制到sheet2的值在范围内

  10. 10

    如果它们匹配,我需要将 Sheet1 Column A 与 Sheet2 Column A 匹配,然后将 Sheet2 Column B 复制到 Sheet1 Column I

  11. 11

    根据Excel中sheet1中的行数在sheet2中创建列

  12. 12

    如何将数据从 sheet1 中的范围复制到 sheet2 5 次,直到到达空单元格?

  13. 13

    Excel:如何根据 sheet1 中的值是否与 sheet2 中的值匹配来对 sheet2 中的值求和

  14. 14

    如何将sheet1仅包含正值的那些行反映到sheet2中?

  15. 15

    excel比较sheet1中的当前时间值与sheet2中的时间值范围

  16. 16

    将数据从Sheet1复制并粘贴到Sheet2,然后删除输入的数据而不删除Sheet1中的功能

  17. 17

    如果Sheet1 A包含Sheet2 C的一部分,则复制行

  18. 18

    Excel VBA:我试图将具有某种条件的sheets1中的数据与sheet2中的数据进行比较,并且仅将不匹配的数据传输到sheet2中

  19. 19

    Google脚本,如何使用正则表达式将一行从Sheet1复制到Sheet2,而不是仅复制一个单元格?

  20. 20

    Excel:当Sheet 1的行数可变时,尝试合并Sheet1的加权平均数据并汇总到Sheet2

  21. 21

    当Sheet1 A1:A2更改时,自动将Sheet 1 A1:A2复制到Sheet 2 A1:A2

  22. 22

    如何在Sheet1的A列中标识不同的单词(每行或每个单元格一个单词),然后将这些行复制并粘贴到Sheet2

  23. 23

    Excel,找到{max(sum(Sheet1(A)+ Sheet2(A)+ Sheet3(A))}公式的行,而在任何表中都没有总和

  24. 24

    如果在sheet2中不存在从sheet1复制到sheet2的单元格

  25. 25

    将满足条件的数组值复制到另一列excel vba

  26. 26

    比较sheet1中sheet2中缺少的行,并在有条件的sheet3中显示它们

  27. 27

    如何在sheet2中给定单元格值的情况下迭代sheet1中的行,并将sheet1中的行替换为sheet 2中的行?

  28. 28

    Google脚本-将SheetC数据从Sheet21复制到columnC Sheet2(如果Sheet2中尚不存在)

  29. 29

    Excel VBA将范围值复制到数组,

热门标签

归档