Excel - Podziel długą kolumnę na wiele kolumn według pustej komórki

2

Mam więc dane, które po zaimportowaniu do programu Excel wyglądają tak:

1
2
3
4

A
B
C
D

!
@
#
$

Chcę, aby dane wyglądały tak:

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

Wszystkie dane znajdują się w jednej kolumnie, a każdy nowy zestaw danych jest kompensowany przez pustą komórkę. Chcę tylko podzielić tę kolumnę na wiele kolumn, tworząc nową kolumnę w każdej pustej komórce. Za każdym razem, gdy rejestruję dane, w każdym zestawie będzie taka sama liczba wpisów, ale nie są one tego samego typu, a między nagraniami może być inna liczba wpisów w każdym zestawie. Zasadniczo wszystko, co chcę mieć, to excel idzie w dół kolumny, a gdy znajdzie pustą komórkę, kopiuje wszystkie pozostałe dane do następnej kolumny, a następnie szuka następnej pustej komórki, w którym to momencie zrobi to samo rzecz, dopóki nie zostaną 2 puste komórki z rzędu.

Szukanie tego, jak to zrobić, jest bardzo irytujące, ponieważ ciągle otrzymuję tekst do wyników w kolumnach, czego nie chcę.

Z góry dziękuję.

anonimowy
źródło

Odpowiedzi:

0

Zalecam wstępne przetwarzanie danych przed zaimportowaniem ich do programu Excel.

Jednak stworzyłem procedurę w VBA, która robi to, co chcesz:

Aby zainstalować makro

Otwórz program Excel -> Alt + F11 -> Wstaw -> Moduł -> wklej następujący kod -> Ctrl + S -> i wybierz z listy rozwijanej „Skoroszyt z obsługą makr programu Excel (* .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

Aby uruchomić makro:

  1. Upewnij się, że jesteś w arkuszu, którym chcesz być! I kliknij w dowolnym miejscu w arkuszu! (Ponieważ to makro działa w aktywowanym arkuszu)
  2. Alt + F11 -> Kliknij dowolne miejsce w kodzie -> naciśnij F5

Możesz także utworzyć przycisk w arkuszu i przypisać mu makro - jest bardziej przyjazny dla użytkownika i nie musisz sprawdzać, czy jesteś w odpowiednim arkuszu.

Notatki

Jeśli nie chcesz, aby makro zaczynało się od komórki A1 (na przykład: zaczynaj od innej kolumny), zmień liczby w 3 i 5 linii.

W tym celu lepiej jest wstępnie przetwarzać dane niż używać makr ...

Jaroslav Svestka
źródło
0

Zakładając, że 1. dane znajdują się w A1 arkusza1. Wpisz :

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

następnie

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

i przeciągnij do końca danych. W Arkuszu 2, komórka A1 .. wpisz:

=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)),"")

następnie przeciągnij, aż do C6. Rozwiązany.

Mam nadzieję, że to pomoże. (:

p / s: Moje referencje są tutaj .

p._phidot_
źródło