【问题标题】:Using SpecialCells for multi-column same-row copy/pasting使用 SpecialCells 进行多列同行复制/粘贴
【发布时间】:2013-01-15 16:30:29
【问题描述】:

有没有办法在使用 .SpecialCells(xlCellTypeConstants, 1) 获取“B”列中的所有数字时,同时复制同一行中的单元格?

例子:

假设脚本找到带有数字的单元格 B2、B4、B5。我如何也复制 D2、D4 和 D5?我可以这样做并且仍然使用特殊细胞吗?最终,我想将这些值复制/粘贴到另一张纸上的 A 和 B 列中。

谢谢!

Dim strOutputFile As Variant
Dim wbkOut As Workbook
Dim tenln As Range
Dim tenlnPaste As Range
Dim wbkVer As Workbook

If strOutputFile(u) Like "*Lines.csv" Then
    With wbkOut.Worksheets(1)
        Set tenln = wbkOut.Worksheets(1).Cells(Rows.Count, 2).End(xlUp)
        Set tenlnPaste = wbkVer.Worksheets("TLines").Range("A" & .Rows.Count).End(xlUp).Offset(1).Resize(tenln.Rows.Count, 1)
        wbkOut.Worksheets(1).Range("B:B").SpecialCells(xlCellTypeConstants, 1).Copy
             With wbkVer.Worksheets("TenLines")
             tenlnPaste.PasteSpecial xlPasteValues
             End With
    End With
End If

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    是的。这实际上很容易。像下面这样:

    Dim rngConst as Range
    On Error Resume Next
    Set rngConst = wbkOut.Worksheets(1).Range("B:B").SpecialCells(xlCellTypeConstants, 1)
    If Not rngConst is Nothing Then 
    
        rngConst.Copy 
       'do your pasting
    
        Set rngConts = rngConst.Offset(,2) 'for moving from B to D
        rngConst.Copy
        'do your pasting
    
    End If
    On Error Go To 0
    

    您也可以这样做,将其全部放入 1 个复制区域:

    Dim rngConst as Range
    
    On Error Resume Next
    
    If Not rngConst is Nothing
    
        Set rngConst = wbkOut.Worksheets(1).Range("B:B").SpecialCells(xlCellTypeConstants, 1)
        Set rngConst = Range(rngConst, rngConst.Offset(,2))
        rngConst.Copy
        'do your pasting
    
    End If
    
    On Error Go To 0
    

    但这会将新工作表上的数据复制到两个连续的列中。例如,它不会从 B 复制到 B 和从 D 复制到 D。

    【讨论】:

    • 好的,那太棒了。大声笑你的方法简单了大约 10000 倍!工作就像一个魅力,谢谢斯科特!
    • +1。我建议错误处理应该与SpecialCells 一起使用,以防被测试的范围不包含指定的范围类型
    • @brettdj - 很棒的评论。我写得有点快,但本着“优秀的程序员”精神,我编辑得更具包容性。
    • @Mike -> 查看关于错误检查的说明。使用SpecialCells 时非常重要。如果你真的现在你的数据,你可以在没有它的情况下侥幸逃脱,但将其作为一种练习是明智的。
    • 你提到这个很有趣! :) 我几乎立即遇到了这个问题,并添加了错误处理来解决这个问题。谢谢!
    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2023-03-22
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多