Jak przekonwertować kolumnę liczb na tekst oddzielony przecinkiem w zestawie czterech


2

Mam kolumnę 200 numerów komórkowych.
Chcę przekonwertować je na wiersze tekstu w zestawie 4 numerów komórkowych i oddzielonych przecinkami.

12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678

Proszę o poradę.

Odpowiedzi:


2

Proste makro VBA do transponowania jednej kolumny do wielu kolumn

wprowadź opis zdjęcia tutaj

Komentowałem każdy krok, więc łatwo dostosować makro do własnych potrzeb.
Możesz wybrać kolumnę danych i liczbę kolumn po transpozycji

  1. Otwórz edytor Excel i VBA za pomocą Alt+F11
  2. W lewym okienku wklej kod pod arkuszem, w którym znajdują się Twoje dane
  3. Zmodyfikuj pierwsze dwa wiersze zgodnie ze swoimi potrzebami
  4. Uruchom makro za pomocą F5

Const strCol = "B"    '## select the column with your data
Const iTrans = 4      '## select how many columns you want after transposing

Sub transposeColumn()
    '## search the last row to know how many cells we have to iterate through
    iLastrow = Range(strCol & ActiveSheet.Rows.Count).End(xlUp).Row
    iCol = Range(strCol & 1).Column

    '## begin to loop through the chosen column
    '## Cause we delete cells on every loop, we need to divide the loop counter
    '## And since the division result isn't an integer, we have to round up
    For i = 1 To WorksheetFunction.RoundUp(iLastrow / iTrans, 0)

        '## set the source and target range for easier access later
        Set rngSrc = Range(Cells(i + 1, iCol), Cells(i + iTrans - 1, iCol))
        Set rngTrg = Range(Cells(i, iCol + 1), Cells(i, iCol + iTrans - 1))

        '## set the format of target range to text
        rngTrg.NumberFormat = "@"

        '## copy and paste the values, the trick is to use transpose
        rngSrc.Copy
        rngTrg.PasteSpecial Transpose:=True

        '## delete all cells which we have just transposed
        rngSrc.Delete shift:=xlUp
    Next i
End Sub  

Twoje makro szybko przekształca dane w 4 kolumny programu Excel. Wspaniale! Jednak zamiast tego muszę przekonwertować je na tekst. Czy to możliwe?
user245491,

Proszę zobaczyć moją edycję
nixda

0

Skrypt awk pomoże rozwiązać problem.

Pierwszy skrypt pętli awk zajmuje się liczbami aż do końcowej wielokrotności czterech. Druga pętla wypisuje kilka ostatnich liczb. Jeśli jest to ostatni numer, przecinek końcowy nie jest drukowany.

awk '{ 
    for (n=1; n < NF-4; n+=4)
           printf("%s, %s, %s, %s\n", $n, $(n+1), $(n+2), $(n+3));    
    for (; n <= NF; n++)
        if (n == NF) 
            print $n;
        else 
            printf("%s, ", $n)          
}' filename

proszę zobaczyć moje komentarze do nixda. Czy twoje makro konwertuje dane Excela na tekst? Ponadto, jak i gdzie umieścić te skrypty?
user245491,

Ups, nie zauważyłem tagu excel, przepraszam
podejrzany

0

Oto rozwiązanie funkcji arkusza roboczego. Gdzie jest twoja lista A1:A40:

=TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+COLUMN()-2),"0000000000")

Jest to wpisane C1i wypełnione po prawej stronie, F1a następnie w dół tyle wierszy, ile potrzebujesz.

wprowadź opis zdjęcia tutaj

Konieczne będzie dostosowanie formuły do ​​arkusza.

Na przykład, jeśli chcesz, aby wiersze wyjściowe zaczynały się od C2, drugi argument INDEXfunkcji powinien być (ROW()-2)*4+COLUMN()-2.

Jeśli D1zamiast tego chcesz, aby wiersze wyjściowe zaczynały się od , drugim argumentem INDEXfunkcji powinno być (ROW()-1)*4+COLUMN()-3.

EDYCJA:
Właśnie widziałem, że chcesz wynik rozdzielany przecinkami. Jest to trochę hackerskie, ponieważ CONCATENATEnie może przyjmować argumentów tablicowych, ale zadziała. Wystarczy wypełnić następujący wzór w kolumnie.

=CONCATENATE(TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+1),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+2),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+3),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+4),"0000000000"))

Jest to zależne od danych wyjściowych rozpoczynających się w wierszu 1. Jeśli na przykład dane wyjściowe zaczynają się w wierszu 2, musisz zmienić każdą instancję ROW()-1na ROW()-2.


Hmm, wynik oddzielony przecinkami? Teraz nie jestem pewien, czy dobrze rozumiem OP. Pomyślałem: „ Muszę przekonwertować je na tekst ”, miał na myśli, że formatem komórki powinien być tekst. Myślisz, że chce ich w jednej celi?
nixda

@nixda Patrz tytuł: „... przekonwertuj kolumnę numeru telefonu komórkowego na tekst oddzielony, w zestawie czterech”. Łatwo przeoczyć. W każdym razie, przykładowy wynik, jaki daje OP, wydaje się być dokładnie tym, czego pożądamy, a nie tylko funky sposobem na gromadzenie danych.
Excellll,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.