Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[Excel] W jaki sposób połączyć wiele kolumn w jedną?

#1
[Excel] W jaki sposób połączyć wiele kolumn w jedną?
Cześć.

Potrzebuje drobnej pomocy z Excelem. Mam obecnie plik z kolumnami o nazwach: ID_Narzędzia, ID_CZESCI, ID_CZESCI, ID_CZESCI i tak dalej. Przykładowe narzędzia wyglądają po wpisaniu tak:

ID_Narzędzia: młotek, ID_CZESCI: trzonek, ID_CZĘSCI: powierzchnia wbijająca (Szczerbol)
ID_Narzędzia: siekiera, ID_CZESCI: trzonek, ID_CZESCI: powierzchnia tnąca

I tak dalej. Czyli - są różne narzędzia, każde z nich ma wyszczególnione kolumny z częściami które mogą się powtarzać (trzonek w przykładzie).

Chcę to zmienić a więc:

ID_Narzędzia: Młotek, ID_CZESCI: trzonek
ID_Narzędzia: Młotek, ID_CZESCI: powierzchnia wbijajaca
ID_Narzędzia: siekiera, ID_CZESCI: trzonek
ID_Narzędzia: siekiera, ID_CZESCI: powierzchnia tnąca

W jaki sposób mogę to zrobić? Nie mogę tego zrobić ręcznie - plik ma ~100 tysięcy rzędów.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#2
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Rozumiem, że ID_CZESCI nie jest zawsze tyle samo (innymi słowy: wyróżnikiem nowego ID_NARZEDZIA jest sama zawartość komórki ("młotek", 'siekiera") a nie "co drugi wiersz")?

Tak czy siak makro. Odpowiedz (najlepiej pokaż w pliku) - to ci napiszę.
Nie pomagam na PW (ew. odpłatnie). 
I osobom z roszczeniowym podejściem. I osobom niedbającym o poprawność językową.
Jak podawać logi
Jeśli nie odpowiadam w danym wątku przez >3 dni - proszę o przypomnienie na PW z linkiem do wątku w treści.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Z tego co wiem - liczba kolumn jest stała (nie zawsze jednak pole ma jakąś wartość). Chodzi o to by z 9 kolumn zrobić tylko dwie: ID_Narzędzia i ID_Części. Prześlę Ci na PW przykładowy plik.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#4
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Jeśli ilość ID_CZĘŚCI jest stała (9) - to lepiej (dużo szybszy kod niż gdyby miał dla każdego wiersza sprawdzać ilość ID_CZĘŚCI i w zależności od tego "rozsuwać" wiersze.

Ostatnie pytanie: kod ma zmodyfikować istniejący arkusz czy oryginalny zostawić i utworzyć nowy (zmodyfikowany)?
Nie pomagam na PW (ew. odpłatnie). 
I osobom z roszczeniowym podejściem. I osobom niedbającym o poprawność językową.
Jak podawać logi
Jeśli nie odpowiadam w danym wątku przez >3 dni - proszę o przypomnienie na PW z linkiem do wątku w treści.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Powiedzmy, że lepiej zrobić osobny arkusz - obecny jest tak duży że zawiesza sprzęt.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#6
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Excel > Alt-F11 > Wstaw: Moduł > wklej (tylko zmień: commandbutton1_Click na dowolną nazwę):

Kod PHP:
Option Explicit

Private Sub commandbutton1_Click()

Dim i As Integerw1 As IntegerAs Integerw2 As Integer
Dim wkb1 
As Worksheetwkb2 As Worksheet
Dim ts 
As Doublete As Double

Set wkb1 
Worksheets(1)
Set wkb2 Worksheets(2)

On Error Resume Next

ts 
Timer

wkb2
.Cells(11).Value "ID_N"
wkb2.Cells(12).Value "ID_C"

w1 2
w2 
2
2
    
Do While Cells(w11).Value <> ""
    
For 2 To 9
        wkb1
.Cells(w11).Copy Destination:=wkb2.Cells(w21)
        
wkb1.Cells(w1k).Copy Destination:=wkb2.Cells(w22)
        
w2 w2 1
    Next k
    w1 
w1 1
Loop
    
te 
Timer

wkb2
.Select

MsgBox 
("Koniec. Czas: " Format(te ts"0.00") & " sek.")
End Sub 

---

Albo zobacz najpierw czy o to chodziło (w razie potrzeby szybko poprawię): https://www.sendspace.com/file/94hzwm

PS. Kod nie jest zbyt wyrafinowany - mógłby być szybszy... Oczko. Ale za to zadziała na każdej wersji (PL / EN/ ...).


---

Do wywalenia jeszcze Private - inaczej się nie pokaże w Makrach.
Teraz zobaczyłem ile jest wierszy (~100 000) - zmieniłem odpowiednio deklarację zmiennych, ale i tak zwracam uwagę na to, że 131 072 to max (i to bez wiersza nagłówka; jeśli ma być - to o 1 mniej >> max ilość wierszy w Excel 2013 to 1 048 576 = 131 072 x 8).
Nie wiem ile będzie się wykonywać > na moim zabytku wyszło mi ~21min. (aproksymacja - mam Excel 2000: tylko 65 536 wierszy > założyłem zgodnie z algorytmem wykres liniowy > dokładność - jak widać - całkiem niezła Duży uśmiech ):

[Obrazek: 34d64411d288b8c0med.png]


Poprawiony kod:

Kod PHP:
Option Explicit

Sub rrrr
()

Dim w1 As LongAs Integerw2 As Long
Dim wkb1 
As Worksheetwkb2 As Worksheet
Dim ts 
As Doublete As Double

On Error GoTo err

Set wkb1 
Worksheets(1)
Set wkb2 Worksheets(2)

ts Timer

wkb2
.Range("A1").Value "ID_N"
wkb2.Range("B1").Value "ID_C"

wkb1.Select

w1 
2
w2 
2
    
Do While Cells(w11).Value <> ""
    
For 2 To 9
        wkb1
.Cells(w11).Copy Destination:=wkb2.Cells(w21)
        
wkb1.Cells(w1k).Copy Destination:=wkb2.Cells(w22)
        
w2 w2 1
    Next k
    w1 
w1 1
Loop
    
te 
Timer

wkb2
.Select

MsgBox 
("Koniec. Czas: " Format(te ts"0.00") & " sek.")
GoTo laend

err
:
MsgBox ("Operacja zakończona błędem")

laend:
End Sub 

Poprawiłem obsługę błędów i coś tam jeszcze. Założenie: dane są w Arkusz1 (Sheet1). Przenoszone są do Arkusz2 - zakładamy, że taki istnieje. Jeśli nie - błąd (standardowo Excel otwiera 3 arkusze). Jeśli coś jest w Arkusz2 - nadpisze bez ostrzeżenia kolumny A i B. Mogę dodać polecenie tworzenie nowego arkusza - napisz - ale jeśli to jest akcja jednorazowa > to chyba byłby to przerost formy nad treścią... Oczko .

PS. Pro forma: start timera jest za wcześnie ustawiony (o 2 / ~900 002 operacji) - już mi się nie chce... Oczko.
Nie pomagam na PW (ew. odpłatnie). 
I osobom z roszczeniowym podejściem. I osobom niedbającym o poprawność językową.
Jak podawać logi
Jeśli nie odpowiadam w danym wątku przez >3 dni - proszę o przypomnienie na PW z linkiem do wątku w treści.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#7
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Dzięki wielkie, dzięki Tobie jakoś to ogarneliśmy. Wiem, że Excel ma ograniczenie - pliki są zrzutami z bazy danych którą i tak dzielimy - całość miała ponad pół miliona takich wpisów. Wesoły
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#8
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Pół miliona rekordów > baza danych - rozumiem.
Nie rozumiem: dlaczego Excel a nie funkcja w samej bazie (nie wiem jaka baza: Access, SQL, nie-Microsoft ?).

---

Ponieważ wątek [Excel] nie pasuje za bardzo ani do Programowania ani do Oprogramowania - zapraszam w podobnych przypadkach na na http://forum.idg.pl/forum/118-pakiety-biurowe/ (tak - "baranek" to ja Wesoły ).
[To nie jest reklama / referencja / ... ]

PS. Jeśli uruchomiłeś kod dla 100 tys. r. - napisz dla mojej ciekawości: ile czasu "mielił"?
Nie pomagam na PW (ew. odpłatnie). 
I osobom z roszczeniowym podejściem. I osobom niedbającym o poprawność językową.
Jak podawać logi
Jeśli nie odpowiadam w danym wątku przez >3 dni - proszę o przypomnienie na PW z linkiem do wątku w treści.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#9
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
Dlatego, że te wydruki są dla osób z zewnątrz i nie chcemy dawać pełnego dostępu / wglądu do całej bazy więc udostępniamy fragmenty.

Nie wiem ile - po ~40 minutach system padł. Wesoły Podobno uruchomiony na nowym komputerze (i7, 12GB RAM, SSD) robił to jakieś 35 - 55 minut ale nie było mnie przy tym, stąd widełki.
Pomagam zwiększyć widoczność w sieci. Wesoły

Każdy dzień bez forum to dzień stracony.
 System operacyjny: windows_eight Przeglądarka: firefox
#10
RE: [Excel] W jaki sposób połączyć wiele kolumn w jedną?
1. Rozumiem.
2. Przerobić kod na szybszy (wszystko "do góry nogami" Wpieniony )?

PS. Możesz podzielić bazę ( przerabiać "po kawałku" - później posklejać) - kod zadziała.
WARUNEK: musi być wiersz nagłówka.

Tak jak napisałem - u mnie: 8191 wierszy > 65521 (z nagłówkami) : 90 sek (teraz; wczoraj widocznie miałem coś w tle odpalone). Wyszło mi teraz 15 min. na całość.
Nie pomagam na PW (ew. odpłatnie). 
I osobom z roszczeniowym podejściem. I osobom niedbającym o poprawność językową.
Jak podawać logi
Jeśli nie odpowiadam w danym wątku przez >3 dni - proszę o przypomnienie na PW z linkiem do wątku w treści.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([Excel] W jaki sposób połączyć wiele kolumn w jedną?)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Excel, GIMP, Photoshop - nauka z książki? adi191 1 1537 09.02.2020, 18:36
Ostatni post: Fix00ser
  Pobieranie rekordów z Facebook'a - MS Excel krisoo 1 2265 29.10.2019, 05:06
Ostatni post: broda99
Question "Excel 2007": Nie wychodzą kolory na wydrukach. Jaka przyczyna? Jak naprawić? ~Anonim 8 4350 14.01.2019, 16:47
Ostatni post: ~Anonim

Skocz do:


Wybrane wątki ([Excel] W jaki sposób połączyć wiele kolumn w jedną?)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Odzyskanie danych po kilku miesiącach Tazz 3 3554 08.02.2019 23:31
Ostatni post: Fix00ser
Cry Steam minimalizuję grę Tech PC 0 3142 08.02.2019 23:14
Ostatni post: Tech PC
  Instrukcja spod 0x00aef9c6 odwołuje się do pamięci pod adresem 0x000000000 RiseOne 1 3487 07.02.2019 22:15
Ostatni post: Juntao
  Pinnacle Studio 18 przyspieszony obraz z Actiona HobbiStycznie 0 3000 06.02.2019 16:14
Ostatni post: HobbiStycznie
  Podłączenie zewnętrznego ekranu dotykowego do laptopa, niezależnie? Nebeb 4 3564 06.02.2019 12:39
Ostatni post: Illidan
  Problem z aktywacja Windows'a 10 home. wrzawus 3 4066 04.02.2019 17:30
Ostatni post: stens
  Thunedrbird - problem z odnośnikami w postach. marcoosp 2 3042 03.02.2019 17:45
Ostatni post: marcoosp
  Przekierowanie w przeglądarce greg8403 0 2993 03.02.2019 16:54
Ostatni post: greg8403
  ZenWriter Nomeolvides 0 3361 03.02.2019 14:15
Ostatni post: Nomeolvides
  problem z podglądem czcionki w Windows 7 64 bit marcoosp 2 3891 03.02.2019 13:05
Ostatni post: marcoosp
Wink Program do bezwzględnego fomatowania dysków. Squeazz 3 3667 03.02.2019 11:52
Ostatni post: Fix00ser
  Odzyskiwanie plików z folderu dokumenty . BartexVP 1 4093 03.02.2019 05:45
Ostatni post: stens
  Dump crash report phixor 5 3419 02.02.2019 23:15
Ostatni post: Officer Crabtree
  Dziwny problem po 1h-2h/różnie grania w fortnite Pompa12 3 3704 29.01.2019 20:54
Ostatni post: Squeazz
  Słaby laptop i który system wybrać mt17 6 5671 29.01.2019 18:35
Ostatni post: BartiX!