EXCEL中可以通過設置(快捷方式Ctrl+G)定位-->定位條件-->可見單元格來選擇並複製可見單元格,但是如果將複製的單元格粘貼到包含隱藏單元格的區域時,EXCEL不會自動跳過這些隱藏的單元格,影響編輯效果。通過以下方法可以實現只對可見的單元格進行復制和粘貼的操作。
工具/原料
各版本EXCEL
方法/步驟
本方法要使用EXCEL VBA宏代碼進行操作,代碼如下:
Option Explicit
Sub 複製粘貼可見單元格()
Dim rgSrc As Range
Dim rgDes As Range
Dim rg As Range, rgPt As Range
Dim strSrcAdd() As String
Dim lCnt As Long, i As Long, j As Long, x As Long, y As Long
On Error GoTo ExitPoint
Set rgSrc = Application.InputBox("請選擇要複製的單元格區域", "提示", , , , , , 8)
If rgSrc.Columns.Count > rgSrc.Parent.UsedRange.Columns.Count Then
Set rgSrc = rgSrc.Parent.Range(rgSrc.Item(1, 1), rgSrc.Item(rgSrc.Rows.Count, rgSrc.Parent.UsedRange.Columns.Count))
End If
If rgSrc.Rows.Count > rgSrc.Parent.UsedRange.Rows.Count Then
Set rgSrc = rgSrc.Parent.Range(rgSrc.Item(1, 1), rgSrc.Item(rgSrc.Parent.UsedRange.Rows.Count, rgSrc.Columns.Count))
End If
Set rgDes = Application.InputBox("請選擇要粘貼的單元格位置", "提示", , , , , , 8)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set rgPt = rgDes.Cells(1, 1)
ReDim strSrcAdd(0)
For Each rg In rgSrc
If Not (rg.Height = 0 Or rg.Width = 0) Then
ReDim Preserve strSrcAdd(UBound(strSrcAdd) + 1)
strSrcAdd(UBound(strSrcAdd)) = rg.Address
End If
Next rg
lCnt = 0
For Each rg In rgSrc.Parent.Range((rgSrc.Rows(1).Address))
If rg.Width <> 0 Then
lCnt = lCnt + 1
End If
Next
strSrcAdd(0) = lCnt
i = 0
j = 0
x = 0
y = 0
For lCnt = 1 To UBound(strSrcAdd)
lp: If ((lCnt - 1) \ strSrcAdd(0)) + i > x Then
j = 0
End If
x = ((lCnt - 1) \ strSrcAdd(0)) + i
y = ((lCnt - 1) Mod strSrcAdd(0)) + j
Set rg = rgPt.Offset(x, y)
If rg.Width = 0 Then
j = j + 1
GoTo lp
ElseIf rg.Height = 0 Then
i = i + 1
j = 0
GoTo lp
Else
rg.Value = rgSrc.Parent.Range(strSrcAdd(lCnt))
End If
Next lCnt
rgDes.Parent.Activate
ExitPoint:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
下面將以一個示例的方式,演示如何使用以上代碼。
圖中標黃色的為要隱藏的單元格,隱藏前後效果如圖所示。
在相應的工作表上點擊右鍵,在彈出的窗口中選擇“查看代碼”
在打開的VBE界面中粘貼以上覆制的代碼。
在“查看宏”對話框中選擇並運行名為“複製粘貼可見單元格”的宏。宏的使用方法,請另外百度。
先選擇要複製的單元(也可以是整行或整列),然後選擇要粘貼的單元格位置(可以多選,也可以只選一個,都是以選擇區域的活動單元為開始粘貼位置)。
粘貼完成後對比效果如下圖,宏只對可見的單元格進行了操作。
注意事項
不可以跨工作簿操作