【问题标题】:Excel copy-paste including hidden columnsExcel复制粘贴包括隐藏列
【发布时间】:2018-10-02 07:58:50
【问题描述】:

我正在使用 Excel 2016 工作表,该工作表由于 UI 原因隐藏了几列。我需要能够过滤掉数据,然后将其复制粘贴到另一张完整的隐藏列并在粘贴到目的地后显示的工作表(它将包含更长的类似交易日志,而不仅仅是一个复制粘贴)。

添加目标图片 - 即希望将 B 列和 C 列的隐藏内容粘贴到目标电子表格中。 这可能吗?

在一篇文章中提出 2 个问题可能不是很好的形式,但是是否有替代方法可以手动执行过滤和复制粘贴功能到另一个电子表格?即:

  • 运行手动过滤器以清除数量字段中的空白;
  • 进行选择
  • 执行手动 Ctrl+C - Ctrl+V 功能

有没有办法让它变得更容易?很遗憾,到目前为止还没有 VBA 或宏体验

【问题讨论】:

    标签: excel


    【解决方案1】:

    编辑 - 完全误解了这个问题!

    您希望在复制时包含隐藏单元格 - 这是隐藏单元格的标准行为,但不适用于过滤列。如果你想避免 VBA abd 你正在处理小的连续范围,那么一个简单的公式可能是最简单的解决方案。

    使用您的示例,我将任意命名源工作表“Sheet1”和目标“Sheet2”。在 Sheet2 中,单击单元格 A2 并在编辑栏中键入: =Sheet1!A3 现在单击单元格 A2 的右下角,将其向右拖动通过 D2,然后向下拖动到 D7。 突出显示范围后,按 ctrl C 进行复制,然后右键单击以粘贴特殊值。

    你已经完成了!

    这是一个 VBA 解决方案:

    Sub copyrng()
    
    Dim srcrng As Range
    Dim tmprng As Range
    Dim dstrng As Range
    Dim srcws As Worksheet
    Dim dstws As Worksheet
    
    
    
    Set srcrng = Application.InputBox("Area to copy", "Source", Type:=8)
    Set srcws = srcrng.Parent
    Set tmprng = Application.InputBox("Top Left Corner of Destination",  "Destination", Type:=8)
    Set dstws = tmprng.Parent
    Set dstrng = dstws.Range(tmprng.Address, tmprng.Parent.Cells(tmprng.Row + srcrng.Rows.Count - 1, tmprng.Column + srcrng.Columns.Count - 1))
    
    dstrng = srcrng.Value
    
     End Sub
    

    第一个答案(回答错误的问题)

    您可以使用“转到...”复制可见单元格

    高亮要复制的范围,按Ctrl G,点击“特殊...”,选择“仅可见单元格”,然后按Ctrl C复制。

    现在粘贴时所有隐藏的单元格都会留下。

    【讨论】:

    • 我不认为@sql-scholar 想在粘贴时包含隐藏单元格,底部截图清楚地显示只有可见单元格被复制。我理解他/她只是想缩短过滤-选择-复制-粘贴的过程。
    • 抱歉,我认为我在屏幕截图上做得很糟糕,因为我应该添加一个 desired way 示例,因为当前屏幕截图显示了当前发生的情况,这意味着隐藏列是留下了,但是我需要他们被包括在内!然而,第二部分是正确的——我还想知道是否也可以自动化这个过滤复制和粘贴过程,再次抱歉让帖子有点混乱,因为我在询问两个技术上不同的事情。
    • 除此之外。非常感谢您的反馈。不幸的是,公式选项不起作用。它们是不同的 Excel 文件/工作簿,虽然我知道您还可以将 Excel 公式指向另一个文件,而不仅仅是另一个工作表,但问题是初始工作簿(“Sheet1”)在进程,同时另一个目标工作表(“Sheet2”)将拥有所有事务的日志。
    • 听起来是时候深入研究 VBA 了。好消息,您已经在使用最好的资源之一 - stackoverflow!我提供的代码显示了一种在工作表之间传输数据的方法。将其与有关如何打开、关闭和保存不同工作簿的答案一起使用,您应该能够运行一些有用的代码。如果您的工作簿和范围始终相同,或者遵循可识别的模式,那么您可能会创建一个按钮解决方案。如果我能提供的建议最好是寻找非常具体的问题/答案并继续尝试直到成功。
    【解决方案2】:

    不,您不能使用常规 Excel 功能执行此操作,因为当其中一列具有空白值时,Excel 无法知道要跳过哪些列/单元格,这是必须由人来决定和完成的事情。

    也许这是进入宏世界的好时机,因为您不需要自定义代码,但可以使用录制的宏而无需任何进一步的操作。此 Excel 功能适用于像您这样没有经验的用户。

    • 查看/宏/录制宏

    • 为你的宏命名

    做您需要做的事,记住 Excel 会在后台将您的一举一动转换为 VBA 代码,从而记录您的一举一动。对于您的情况,请执行以下操作:

    • 使用过滤器组合框过滤空白
    • 使用CTRL-G/特殊/当前区域选择范围(不要通过鼠标或键盘选择单元格,您的代码应该是通用的,不应包含手动范围,因为您不想进行任何编码)
    • CTRL-C复制
    • 如果“待粘贴”单元格在所有情况下都不是固定的,那么您应该在此处停止录制宏。如果粘贴单元格已修复,则在录制宏时粘贴内容。

    录制宏后,使用以下命令为新宏分配快捷方式: 宏/查看宏/选项菜单

    瞧!现在,您可以使用该键盘快捷键完全按照您在录制宏时所做的操作。如果您在录制时没有粘贴内容,那么您可以使用宏快捷方式 s/b,然后转到要粘贴的单元格,然后按 CTRL-V

    当你有足够的信心时,试试中的编辑菜单,看看你手头有什么代码,也许做一些小的改动等等。我看到很多人一开始不熟悉基本编码,但在 Excel 中看到此功能后不知何故开始编写自己的代码。祝你好运!

    【讨论】:

      【解决方案3】:

      ProfoundlyOblivious 代码很酷,但是

      dstws = activesheet
      

      将始终是源,因为活动表在输入框之后直接传回。

      我试着改成

      Set dstws = tmprng.Parent
      

      但由于某种原因,这会破坏

      Set dstrng = dstws.Range..
      

      我得到一个运行时错误 1004 Method range of object _Worksheet failed?!?!

      如果我可以解决此解决方案适用于任何目标,甚至是其他文件。

      另一种方法是使用 vba 取消过滤数据,然后进行复制,然后重新打开相同的过滤器。完成后,您可以去任何地方粘贴剪贴板上的内容。

      【讨论】:

      • 问题是我的代码有不止一个错误。我不知道那天我抽了什么——不管是什么,我都不推荐!所以是的,第二个“ActiveSheet”应该是tmprng Parent,就像你试过的一样;当tmprng.Parent 不是ActiveSheet 时,这会产生问题设置dstrng。该问题的根源是与Cells(tmprng.Row[...] 的不合格引用,因为它隐式引用ActiveSheet 并因此创建了一个不可能的范围。有两种方法可以修复。你可以在Cells 末尾打一个.Address,或者用tmprng.Parent. 限定Cells
      • 用合格的引用更新了我的代码 - 不知道我自己怎么没有注意到所有三个错误 - 可怕!是的,它可以与其他工作簿一起使用,前提是这些工作簿可以在同一个 Excel 实例中看到彼此。 +1 告诉我我的愚蠢错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多