Forum Discussion

NSK-Mar's avatar
NSK-Mar
Copper Contributor
Nov 17, 2019

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

  • bobs10's avatar
    bobs10
    Copper Contributor
    I'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?
  • siladityac's avatar
    siladityac
    Copper Contributor

    NSK-Mar 

     

    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.

    • mingsheng13's avatar
      mingsheng13
      Copper 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.

    • kakaitou's avatar
      kakaitou
      Copper Contributor

      Alhamdulillaah.. thank you, your solution help me solve my problem with copy-paste in filtered view..

  • cbklynny's avatar
    cbklynny
    Copper Contributor

    NSK-Mar I don't understand how it's possible that Google Sheets is far more sophisticated than Excel. Is there a solution to this yet?

  • Cangkir's avatar
    Cangkir
    Brass Contributor

    NSK-Mar 

    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:

    1. The macro is available on any open workbook & easy to access.
    2. You don’t need to put the macro on all your workbooks, just on PERSONAL.xlsb.

     

    • rajm189's avatar
      rajm189
      Copper Contributor

      Cangkir 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 ?

      • Cangkir's avatar
        Cangkir
        Brass Contributor

        rajm189 

        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.

        1. About how many rows is your data?
        2. Do you copy from filtered range? 
        3. Does your data have multiline cells?

         

    • dastriderman's avatar
      dastriderman
      Copper Contributor

      To just select visible cells - shortcut alt + semilcolon (alt + 😉 is the real MVP.

  • kanthrishi's avatar
    kanthrishi
    Copper Contributor

    NSK-Mar 

    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

    • WaltB's avatar
      WaltB
      Copper 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.

  • Cangkir's avatar
    Cangkir
    Brass Contributor

    NSK-Mar 

    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

     

     

Resources