2

Итак, у меня есть данные, которые после импорта в Excel выглядят так:

1
2
3
4

A
B
C
D

!
@
#
$

Я хочу, чтобы данные выглядели так:

1 A !
2 B @
3 C #
4 D $

Все данные находятся в одном столбце, и каждый новый набор данных смещается на пустую ячейку. Все, что я хочу сделать, - это разделить один столбец на несколько столбцов, создавая новый столбец в каждой пустой ячейке. Каждый раз, когда я записываю данные, в каждом наборе будет одинаковое количество записей данных, но они не одного типа, и между записями может быть разное количество записей в каждом наборе. По сути, все, что я хочу, - это чтобы Excel прошел вниз по столбцу, и когда он находит пустую ячейку, он копирует все оставшиеся данные в следующий столбец, а затем ищет следующую пустую ячейку, после чего он будет делать то же самое. вещь, пока есть 2 пустых клетки подряд.

Поиск, как это сделать, очень раздражает, потому что я продолжаю получать текст в столбец результатов, а это не то, что я хочу.

Заранее спасибо.

2 ответа2

0

Предполагая, что 1-ые данные находятся в A1 Листа 1. введите :

B1 ---> 1
C1 ---> 1

затем

B2 ---> =IF(A2="",0,B1+1)
C2 ---> =IF(B2=0,C1+1,C1)

и перетащите до конца данных. В Sheet2, A1 cell .. введите:

=IFERROR(INDEX(Sheet1!$A:$A,MATCH(1,INDEX((CELL("row",Sheet2!A1)=Sheet1!$B:$B)*(CELL("col",Sheet2!A1)=Sheet1!$C:$C),0,1),0)),"")

затем перетащите до C6. Решаемые.

Надеюсь, поможет. (:

p/s: моя ссылка здесь .

0

Я бы рекомендовал предварительно обработать данные, прежде чем импортировать их в Excel.

Однако я создал процедуру в VBA, которая делает то, что вы хотите:

Чтобы установить макрос

Откройте Excel -> Alt+F11 -> Вставить -> Модуль -> вставьте следующий код -> Ctrl+S -> и выберите «Excel Macro-Enabled Workbook (* .xlsm)» из выпадающего списка

Sub ToManyColumns()
    Dim firstCellRow As Long
    firstCellRow = 1              'change this if you don't want to start at A1
    Dim firstCellColumn As Long
    firstCellColumn = 1           'change this if you don't want to start at A1

    Application.ScreenUpdating = False
    ActiveSheet.Cells(firstCellRow, firstCellColumn).Activate
    Dim column As Long
    column = firstCellColumn
    Dim startIndex As Long
    Dim endIndex As Long
    Dim lastRow As Long
    lastRow = firstCellRow

    Do While True
        'find the range to copy
        startIndex = ActiveCell.row
        Do While ActiveCell.Value <> ""
            endIndex = ActiveCell.row
            ActiveCell.Offset(1).Activate
        Loop

        lastRow = ActiveCell.row

        Range(Cells(startIndex, firstCellColumn), Cells(endIndex, firstCellColumn)).Select
        Selection.Copy
        Cells(firstCellRow, column).Select
        Selection.PasteSpecial Paste:=xlPasteValues

        'get back to last rowIndex
        Cells(lastRow, firstCellColumn).Activate
        ActiveCell.Offset(1).Activate

        If ActiveCell.Value = "" Then Exit Do

        column = column + 1
    Loop

    'cleanUp -------------------------------------------
    Dim deleteFrom As Long
    Dim deleteTo As Long
    deleteTo = ActiveCell.row

    ActiveSheet.Cells(firstCellRow, firstCellColumn).Activate
    Do While ActiveCell.Value <> ""
        ActiveCell.Offset(1).Activate
    Loop
    deleteFrom = ActiveCell.row

    Range(Cells(deleteFrom, firstCellColumn), Cells(deleteTo, firstCellColumn)).Select
    Selection.ClearContents

    ActiveSheet.Cells(firstCellRow, firstCellColumn).Activate
    'cleanUp -------------------------------------------

    Application.ScreenUpdating = True
End Sub

Чтобы запустить макрос:

  1. Убедитесь, что вы находитесь на рабочем листе, которым хотите быть! И нажмите в любом месте на листе! (Потому что этот макрос выполняется в активированной рабочей таблице)
  2. Alt+F11 -> Нажмите где-нибудь в коде -> нажмите F5

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

Заметки

Если вы не хотите, чтобы макрос начинался с ячейки A1 (например, с другого столбца), измените числа в 3-й и 5-й строках.

Для этого лучше предварительно обработать данные, чем использовать макросы ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .