【问题标题】:Unmerging excel rows, and duplicate data取消合并excel行和重复数据
【发布时间】:2012-02-09 16:45:26
【问题描述】:

我得到了一个存储在 Microsoft Excel 中的相当大的数据库,我必须尝试将其转换成有用的东西。
但是,我遇到的问题之一是一些数据合并在一起(水平在2s内)。

例如;

row 1: [ x ][ x ][ x ][ x ][ x ]
row 2: [ x ][ x ][ o    o ][ x ]
row 3: [ o    o ][ x ][ o    o ]

x 是单个单元格,o 是合并在一起的

我想要做的是取消合并所有行(我可以使用取消合并按钮相当容易地做到这一点),但是对于合并单元格所在的位置,将数据复制到 2 个单元格中。
从; [[ Some Data ]]
至; [ Some Data ][ Some Data ]

谢谢!任何帮助表示赞赏。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这是一个 VBA 解决方案。此宏将搜索活动工作表中的每个单元格以查看它们是否合并。如果是,它将合并单元格的范围存储在临时文件中。 range 变量,取消合并单元格,然后用未合并范围中第一个单元格的值(值是什么)填充范围。

    Sub UnMergeFill()
    
    Dim cell As Range, joinedCells As Range
    
    For Each cell In ThisWorkbook.ActiveSheet.UsedRange
        If cell.MergeCells Then
            Set joinedCells = cell.MergeArea
            cell.MergeCells = False
            joinedCells.Value = cell.Value
        End If
    Next
    
    End Sub
    

    【讨论】:

    • 谢谢你,它工作得很好!环顾四周,弄清楚如何执行 VBA。
    • Issun,我只在我自己的 VBA 中使用了一行,即“cell.MergeCells = False”,这就是全部,并且每年对我有用几次。它在不先检查每个单元格的情况下取消合并每个单元格。
    • 检查它的要点是设置范围,以便您可以使用相同的值填充所有未合并的单元格,因为 unmerge 只是将值放在第一个单元格中并使其他单元格为空(问题OP有)
    【解决方案2】:

    这是基于 @aevanko 的回答,但可以推广到任意范围。

    Sub UnMergeRange(WorkRng As Range)
        Dim cell As Range, joinedCells As Range
       
        For Each cell In WorkRng
            If cell.MergeCells Then
                Set joinedCells = cell.MergeArea
                cell.MergeCells = False
                joinedCells.Value = joinedCells.Cells(1, 1).Value
            End If
        Next
    End Sub
    

    我还进行了更改,因为我遇到了一个不起作用的角落案例。当有一个垂直合并的单元格包含超出提供范围的单元格时。我必须使用更高级的表达式来获取值。

    【讨论】:

      【解决方案3】:
      1. 选择已合并数据的范围
      2. 单击合并和居中以取消合并单元格
      3. 再次选择数据范围
      4. 按 Ctrl+G > 特殊 > 空白
      5. 按 = 和向上箭头键
      6. 按 Ctrl+Enter

      【讨论】:

        【解决方案4】:

        你不需要 VBA 来做这样的事情。

        1. 选择合并单元格的范围
        2. 取消合并单元格
        3. 首页 -> 查找和选择 -> 转到特殊... -> 空白 -> 确定
        4. 键入“=”向上移动一个单元格并按 Ctrl + Enter

        如果从以下位置启用 R1C1 样式: 文件 -> 选项 -> 公式 -> R1C1 参考样式然后

        1. ...
        2. ...
        3. ...
        4. 键入“=R[-1]c”并按 Ctrl + Enter

        【讨论】:

        • @Dan “存储在 Microsoft Excel 中”意味着它们不能超过 1M。如果工作表较大,建议停用自动计算
        【解决方案5】:

        我不知道如何快速实现 VBA 代码,但我使用了一个公式来填充另一列的值...然后我做了复制/粘贴魔术,将值粘贴到未合并的单元格上。该公式基于该值与合并单元格中的第一个单元格相关联,而所有其他单元格都解析为 0(零)这一事实。

        如果 Col. A2:A100 有合并的单元格,我做了以下操作:

        1. 在单元格 B2 中,我输入了这个公式:=IF(A2<>0,A2, B1)
        2. 将公式复制到 B100
        3. 仅将值复制/粘贴到 C 列。
        4. 取消合并所有 A 列。
        5. 将 C 列中的值复制到 A 列。

        其实胆子大的可以简化成这个系列……

        1. 取消合并所有 A 列
        2. 在单元格 B2 中,我输入了这个公式:=IF(A2<>0,A2, B1)
        3. 将公式复制到 B100
        4. 仅将值复制/粘贴到 A 列

        跳过C列的使用...

        【讨论】:

          【解决方案6】:

          这是在所有单元格中保存数据的另一种方法。我有一份每天发布的报告,其中包含合并的单元格,以避免每天取消合并单元格,我使用 Power Query 引用报告。

          使用向下填充选项,我可以将数据填充到合并范围内的所有单元格中。为我工作! :)

          Report view with marked FIll Down option

          【讨论】:

          • 好吧,这对于垂直合并而不是像原始问题中的水平合并很有用:)
          猜你喜欢
          • 2014-03-12
          • 1970-01-01
          • 1970-01-01
          • 2014-03-10
          • 2019-04-10
          • 2021-07-15
          • 2020-04-30
          • 2018-03-13
          • 2013-01-15
          相关资源
          最近更新 更多