-->

Unmerging excel rows, and duplicate data

2020-02-16 08:58发布

问题:

I have been given a fairly large database stored in Microsoft Excel, which I have to try convert into something useful.
However, one of the problems that I am encountering is that some of the data is merged together (horizontally in 2s).

For example;

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

Where x's are single cells and o's are merged together

What I want to do is unmerge all the rows (which I could do fairly easy with the unmerge button), but for where the merged cell was, have the data duplicated across the 2 cells.
From; [[ Some Data ]]
To; [ Some Data ][ Some Data ]

Thanks! Any help is appreciated.

回答1:

This is a VBA solution. This macro will search every cell in the active sheet to see if they are merged. If they are, it stores the range of the merged cells in a temp. range variable, unmerges the cells, then fills the range with the value of the first cell in the unmerged range (what the value was).

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


回答2:

  1. Select the range which has merged data
  2. Click on Merge and Centre to unmerge cells
  3. Select the range of data again
  4. Press Ctrl+G > Special > Blanks
  5. Press = and up arrow key
  6. Press Ctrl+Enter


回答3:

You don't need VBA for something like that.

  1. Select the range of the merged cells
  2. Unmerge the cells
  3. Home -> Find and Select -> Go to special... -> Blanks -> ok
  4. Type "=" move one cell up and press Ctrl + Enter

If R1C1 styles are enabled from: File -> Options -> Formula -> R1C1 Reference style then

  1. ...
  2. ...
  3. ...
  4. Type "=R[-1]c" and press Ctrl + Enter


回答4:

I don't know how to quickly implement the VBA code, but I used a formula to populate another column with the values... then I did the copy/paste magic of pasting values over the unmerged cells. This formula is based on the fact that the value is associated with the FIRST cell of the merged cells, and all others resolve to 0 (zero).

If Col. A2:A100 has the merged cells, I did the following:

  1. In Cell B2, I entered this formula: =IF(A2<>0,A2, B1)
  2. Copy the formula down to B100
  3. Copy/Paste VALUES ONLY to column C.
  4. Unmerge all of Column A.
  5. Copy Values from Column C into Column A.

Actually, you can simplify it to this series if you're bold...

  1. Unmerge all of Column A
  2. In Cell B2, I entered this formula: =IF(A2<>0,A2, B1)
  3. Copy the formula down to B100
  4. Copy/Paste VALUES ONLY to column A

That skips the use of Column C...