前言|工作案例
在Excel表格的日常使用中,通常会将一个表格中的部分数据复制并粘贴到另一个表格中,有时会出现Excel中无法对多个选定内容使用此命令的问题,从而导致无法复制。以下附录说明了如何解决Excel中无法对多个选定内容使用此命令的问题。
如下图所示,我们用一个简单的例子来做说明剖析:
我们想将左边表格中的A2,B3,C4,D5单元格中的数据一次性复制出来,粘贴到右边表格对应的位置。
当我们通过按住Ctrl键,选中不连续的单元格A2,B3,C4,D5单元格后,右击鼠标,点击“复制”按钮,发现会弹出一个错误提示:“无法对多重选择区域执行此操作”。复制粘贴以失败告终。
首先我们要知道Excel中的“多重选定区域”是指:进行多次选择确定下来的区域,也就是按下Ctrl键进行选择得到的区域。如下图所示:我们通过按住Ctrl键选中不连续的单元格B2,B4,B6单元格,注意此时选定区域都在一列(或一行)中,此时右击鼠标,可以实现正常的复制粘贴。
如下如所示:我们通过按住Ctrl键选中不连续的单元格B2,B4,B6单元格的同时,再次选中一个另一列的D6单元格。注意此时选定区域不在一列中,形成了多重区域,此时右击鼠标,点击“复制”按钮后,就会出现“无法对多重选择区域执行此操作”的错误提示。
方案|VBA代码解决方案
首先,我们依旧通过按住Ctrl键,选中不连续的单元格A2,B3,C4,D5单元格后,先不着急右击点击复制;而是右击工作表“Excel情报局”名称标签,接着点击“查看代码”,弹出VBA代码录入界面,将下面一段代码复制粘贴到VBA代码录入界面。
代码如下:
Sub 多重选定区域复制粘贴()
On Error Resume Next
Dim SRange() As Range, UPRange As Range, TRange As Range
Dim i As Long, AreaNum As Long
Dim MinR As Long, MinC As Long
AreaNum = Selec
ReDim SRange(1 To AreaNum)
MinR = Ac
MinC = Ac
For i = 1 To AreaNum
Set SRange(i) = Selec(i)
If SRange(i).Row < MinR Then MinR = SRange(i).Row
If SRange(i).Column < MinC Then MinC = SRange(i).Column
Next i
Set UPRange = Cells(SRange(1).Row, SRange(1).Column)
Set TRange = A(prompt:="请输入粘贴位置的左上角单元格", Title:="多重选定区域复制粘贴", Type:=8)
A = False
For i = 1 To AreaNum
SRange(i).Copy
TRange.Offset(SRange(i).Row - MinR, SRange(i).Column - MinC).PasteSpecial Paste:=xlPasteValues
Next i
A = True
End Sub
点击上方的“运行-运行子过程/用户窗体”,会弹出一个提示框:"请输入粘贴位置的左上角单元格",即我们要粘贴存放数据的起始位置。
如果我们想要保持粘贴数据的相对位置不变,需要将这个起始位置设置为:我们复制的不连续的单元格中最上方的单元格所在行的最左边单元格的位置,即F2单元格。在这个提示框里面点击自动识别单元格位置即可。
最后点击“确定”,即可实现数据的复制粘贴。如下图所示:
如果我们想继续复制左表数据源中的其他的不连续区域单元格,即可以继续重复上述的步骤操作即可。如下图所示: