Forum Discussion
Paste TO visible cells only in a filtered cells only
I want to paste a formula or value in the visible cells of a filtered column. How to go about it? Thanks
52 Replies
- bobs10Copper ContributorI'm using MS Excel 2016 Professional Plus and I get the dialog box to select paste "Visible cells only" but it does nothing. I can't get it to work. Very frustrating. Any idea why this is happening?
- siladityacCopper Contributor
Step 1: Select both the filtered source column and destination column
Step 2: Go to Home->Editing->Fill and select the direction of fill from source to destination column. The source and destination column doesn't need to be adjacent.
- mingsheng13Copper Contributor
For people having this problem in the future: After selecting the filtered source column and destination column at the same time, use alt+; / option+; to select visible cell only. Then use fill and select the direction e.g. right.
- kakaitouCopper Contributor
Alhamdulillaah.. thank you, your solution help me solve my problem with copy-paste in filtered view..
- siladityacCopper ContributorGlad it helped 🙂
- Mike_SelmanCopper Contributor
- CangkirBrass Contributor
I'd like to add something to my answer above, about the “Sub CopyVisibleToVisible1” macro. If you want to use this frequently, you can assign the macro to a toolbar buttons. This is how:
- Copy the code:
Sub CopyVisibleToVisible1() 'use this for: 'Copy paste(value only): 'from filtered range to filtered range 'from filtered range to unfiltered range 'from unfiltered range to filtered range 'Not work on hidden column Dim rngA As Range Dim rngB As Range Dim r As Range Dim Title As String Dim ra As Long Dim rc As Long On Error GoTo skip: Title = "Copy Visible To Visible" Set rngA = Application.Selection Set rngA = Application.InputBox("Select Range to Copy then click OK:", Title, rngA.Address, Type:=8) Set rngB = Application.InputBox("Select Range to Paste (select the first cell only):", Title, Type:=8) Set rngB = rngB.Cells(1, 1) Application.ScreenUpdating = False ra = rngA.Rows.Count rc = rngA.Columns.Count If ra = 1 Then rngB.Resize(, rc).Value = rngA.Value: Exit Sub Set rngA = rngA.Cells(1, 1).Resize(ra, 1) For Each r In rngA.SpecialCells(xlCellTypeVisible) rngB.Resize(1, rc).Value = r.Resize(1, rc).Value Do Set rngB = rngB.Offset(1, 0) Loop Until rngB.EntireRow.Hidden = False Next Application.GoTo rngB Application.ScreenUpdating = True Application.CutCopyMode = False Exit Sub skip: If err.Number <> 424 Then MsgBox "Error found: " & err.Description End If Application.ScreenUpdating = True Application.CutCopyMode = False End Sub- Open VBA window (by pressing ALT+F11)
- Open PERSONAL.xlsb
- In module section, create a new module, say module1.
- Paste the code into module1.
Now assign the macro to a toolbar button. You can follow the instruction on this link:
https://www.excelcampus.com/vba/add-macro-buttons-excel-ribbon-toolbar/
The benefit of doing it this way:
- The macro is available on any open workbook & easy to access.
- You don’t need to put the macro on all your workbooks, just on PERSONAL.xlsb.
- CangkirBrass Contributor
hi this VBA is working fine, but it’s taking time if we are using in larger number of cells, can we get quicker VBA ?
Sorry for the late reply.
It depends on your data.
- About how many rows is your data?
- Do you copy from filtered range?
- Does your data have multiline cells?
- dastridermanCopper Contributor
To just select visible cells - shortcut alt + semilcolon (alt + 😉 is the real MVP.
- kanthrishiCopper Contributor
We cant do it has values, but using simple formula we can achieve it as below:-
Step 1:- Please copy values you wanted and paste them in separate excel and name each row with numbers in sequence.
Step 2:- Filter the cells to which the values needed to pasted , in another column i.e, not in the cells you want to paste update it with numbers in sequence .
Step 3: Use Vlook up with look up value from step2 sequence updated and look up array from Step 1 sequence , and use column as required . you will get the values.
Break the link of the file and go on.
Hope this is useful.
Thanks
Kanthrishi
- WaltBCopper Contributor
kanthrishi Thanks for that. I think there are several possible workarounds. Myself, I simply sorted my data and then used xlookup to populate the data I lost, from a backup. The point isn't how to do this. Its that we shouldn't have to. I can't see any reason for filtering to work the way it does. I think Microsoft should change the default behaviour to only paste into the filtered cells.
- CangkirBrass Contributor
With this macro you can easily copy-paste values from & to filtered range.
Sub CopyVisibleToVisible1() 'use this for: 'Copy paste(value only): 'from filtered range to filtered range 'from filtered range to unfiltered range 'from unfiltered range to filtered range 'Not work on hidden column Dim rngA As Range Dim rngB As Range Dim r As Range Dim Title As String Dim ra As Long Dim rc As Long On Error GoTo skip: Title = "Copy Visible To Visible" Set rngA = Application.Selection Set rngA = Application.InputBox("Select Range to Copy then click OK:", Title, rngA.Address, Type:=8) Set rngB = Application.InputBox("Select Range to Paste (select the first cell only):", Title, Type:=8) Set rngB = rngB.Cells(1, 1) Application.ScreenUpdating = False ra = rngA.Rows.Count rc = rngA.Columns.Count If ra = 1 Then rngB.Resize(, rc).Value = rngA.Value: Exit Sub Set rngA = rngA.Cells(1, 1).Resize(ra, 1) For Each r In rngA.SpecialCells(xlCellTypeVisible) rngB.Resize(1, rc).Value = r.Resize(1, rc).Value Do Set rngB = rngB.Offset(1, 0) Loop Until rngB.EntireRow.Hidden = False Next Application.GoTo rngB Application.ScreenUpdating = True Application.CutCopyMode = False Exit Sub skip: If err.Number <> 424 Then MsgBox "Error found: " & err.Description End If Application.ScreenUpdating = True Application.CutCopyMode = False End Sub