Слияние ячеек в Excel 2007, потому что веб-средство экспорта является панком

Я должен использовать веб-сайт, чтобы экспортировать данные в формате XLS, быть преобразованным в CSV, быть выведенным в базу данных MySQL.

Моя проблема состоит в том, что это средство экспорта POS рассматривает возвраты каретки в исходных данных как новые поля, так, чтобы файл Excel был путаницей:

Пример:

[Name]          [Age]     [Employment History]     // Excel File:
 Smith, John     30        2005-2006 Bennigan's    // row 1
                           2006-2007 Shenanigan's  // row 2
                           2007-2008 Grizzlebee's  // row 3
 Smith, Karen . . .                                // row 4

Это полностью effs мое преобразование CSV с одним шагом. Стандартная команда слияния не полезна, потому что она отбрасывает все данные кроме первого поля.

Единственное решение, которое я нашел, состоит в том, что я могу вставить смежный столбец, объединить соответствующие строки, связать те 3 строки в блок постслияния во втором столбце и затем удалить оригинал. Это жестоко, почти невозможно интенсивно временем все же.

У кого-либо есть лучший способ решить проблему? Веб-средством экспорта POS управляет другая компания и полностью из моих рук...

Редактирование для добавления "корректного" примера:

    [Name]    |  [Age]   |  [Employment History]    | // Excel File:
______________|__________|__________________________|__
 Smith, John  |   30     |   2005-2006 Bennigan's   | // row 1
              |          |   2006-2007 Shenanigan's | 
              |          |   2007-2008 Grizzlebee's | 
______________|__________|__________________________|___
 Smith, Karen |   25     |   2001-2010 Ma Bell      | // row 2
 _____________|__________|__________________________|___
1
задан 21.09.2010, 10:58

1 ответ

Согласно нашему обсуждению в комментариях, вот макрос, который я думаю, должен достигнуть того, что Вы после. Очевидно, протестируйте его на скопированных данных сначала в случае, если что-то плохо происходит.

Надо надеяться, единственная вещь, которую необходимо будет скорректировать, colToMerge постоянный около вершины, для соответствия, какой бы ни столбец данные для слияния, оказывается, находится в.

Править

Я только что определил Excel 2007 в Вашем заголовке вопроса, так обратите внимание на то, что я записал это в 2003.
Надо надеяться, это должно все еще работать, потому что это только делает очень простое перемещение и управление значением ячейки. Сообщите мне, не делает ли это, и я скорректирую его для Excel 2007, после того как я дома этим вечером.


Код

Sub MergeEmploymentCol()

    'PARAMETER: The column number you are merging. A=0,B=1,etc
    Const colToMerge = 2

    'First unmerge everything
    Cells.UnMerge

    'Select First "valid" row, done manually incase top rows are packed together
    Range("A1").Select
    Do While ActiveCell.Value <> 0
        ActiveCell.Offset(1, 0).Select
    Loop
    ActiveCell.Offset(-1, 0).Select

    'Some variables        
    Dim thisRow As Integer, nextRow As Integer, i As Integer

    Do While ActiveCell.Value <> 0
        'Only need to merge if next row is blank
        If (ActiveCell.Offset(1, 0).Value = 0) Then

            'Get the row numbers for this valid row and the next valid row
            thisRow = ActiveCell.Row

            Selection.End(xlDown).Select
            If (ActiveCell.Value <> 0) Then
                nextRow = ActiveCell.Row
            Else
                'must be last row - no valid rows below this one
                'special handling to find correct row
                ActiveCell.Offset(0, colToMerge).Select
                Selection.End(xlUp).Select
                nextRow = ActiveCell.Row + 1
                ActiveCell.Offset(0, -colToMerge).Select

                'Exit if this last valid row has no duplicates
                If (thisRow + 1 = nextRow) Then
                    Exit For
                End If
            End If
            Selection.End(xlUp).Select

            'Merge the data between here and the next valid row
            Dim combinedData As String
            combinedData = ""
            For i = 0 To (nextRow - thisRow) - 1
                combinedData = combinedData & ActiveCell.Offset(i, colToMerge).Value & Chr(10)
            Next i

            'Trim last (unnecessary) line-return
            combinedData = Mid(combinedData, 1, Len(combinedData) - 1)

            'Place data in cell
            ActiveCell.Offset(0, colToMerge).Value = combinedData

            'Delete unneeded rows
            ActiveCell.Offset(1, 0).Rows("1:" & nextRow - thisRow - 1).EntireRow.Select
            ActiveCell.Offset(0, 0).Range("A1").Activate
            Selection.Delete Shift:=xlUp

            'Select first cell of next valid row
            ActiveCell.Offset(0, 0).Select
        Else
            'Next row not blank, so no need to merge
            'Simple step down to next row
            ActiveCell.Offset(1, 0).Select
        End If

    Loop

End Sub
1
ответ дан 17.12.2019, 00:34

Теги

Похожие вопросы