繁体   English   中英

粘贴到Excel中的可见单元格上

[英]Paste onto visible cells in Excel

我想将一个普通的值列(未隐藏)粘贴到包含隐藏值的选择中。 在执行此操作时,我希望excel忽略它们之间的单元格,就像它们已被删除一样。 例如:

1个

Cells A1-A3 contain 1,2,3. Cells C3-C5 contain A,B,C

在此处输入图片说明

We hide row 2, so that the '2' is no longer visible.

在此处输入图片说明

A normal paste will result in the 'B' overwriting the hidden '2'.

在此处输入图片说明

This is what the solution would look like, meaning the '2' is unaffected.

目前,我知道Alt+; 仅选择可见单元格的功能,但是当尝试在此处粘贴时,excel抱怨粘贴区域。

谁能想到具有excel基本功能,公式或VBA的解决方案来实现这一目标?

这是使用VBA的一种方法

它使用数组,因此不会复制单元格格式


Option Explicit

Public Sub CopyVisiblesOnlyAndPasteOverVisiblesOnly()
    Const FROM_COL = 3
    Const TO_COL = 1
    Dim arr As Variant, vis As Variant, ub As Long, i As Long, j As Long, itm As Variant

    With ThisWorkbook.Worksheets("Sheet1")
        arr = .UsedRange.Columns(FROM_COL)
        ub = UBound(arr)
        ReDim vis(1 To ub)
        j = 1
        For i = 1 To ub     'Copy visible cells in column 3
            If Not IsError(arr(i, 1)) Then  'skip errors, empty, and hidden rows to copy
                If Len(arr(i, 1)) > 0 And .Rows(i).Hidden = False Then
                    vis(j) = arr(i, 1)
                    j = j + 1
                End If
            End If
        Next
        ub = j - 1
        ReDim Preserve vis(1 To ub)

        If ub > 0 Then
            j = 1
            For i = 1 To ub
                While .Rows(j).Hidden = True    'skip hidden rows to paste over
                    j = j + 1
                Wend
                .Cells(j, TO_COL) = vis(i)
                j = j + 1
            Next
        End If
    End With
End Sub

测试表-所有行可见

TestSheetAllRows

测试表-仅可见行

TestSheetVisibleRows

结果-仅可见行

结果表可见行

结果-所有行

结果表全部行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM