ID tematu: 75908
|
Układ danych z poziomego na pionowy |
Autor |
Wiadomość |
greg2009
Exceloholic
Wersja: Win Office 365
Posty: 187
|
Wysłany: 11-06-2024, 11:25 Układ danych z poziomego na pionowy
|
|
|
Witam serdecznie
Mam stray plik z danymi zapoczątkowany kilka lat temu przez kogoś. Jest on tylko wycinkiem całego zespołu arkuszy pracujących razem z sobą.
Chciałbym z tego pliku wyciągnąć dane, które są przypisane do indeksów, a ułożone w poziomie.
Dane to wartości, ale zapisywane w formie "pary". Ta para z kolei to zestaw dwóch komórek. Lewa komórka to nazwa (przyjmujemy, że zaczyna się od litery), druga komórka to wartość liczbowa z zakresu od minus do plus 100000.
W 99% mamy takie pary ułożone na prawo w wierszach jedna za drugą. Jednak z uwagi, że plik ma kilka lat wyłapałem, że czasem jest sama wartość, czyli brak pary, stąd trzeba by to ogarnąć jakimś dodatkowym założeniem. W załączonym pliku mam nadzieję, że jest czytelnie opisane i zobrazowane. Gdybym miał to ułożyć formułą w Excelu, to wyglądała by tak, że jeżeli na lewo od liczby jest tekst to kopiuj parę, a jeżeli na lewo od liczby jest liczba, to kopiuj tylko solo tą liczbę...
Z góry dziękuję za pomoc
Transpozycja 2024-06-11.zip
|
Pobierz Plik ściągnięto 38 raz(y) 17.3 KB |
|
_________________ Dziękuję i pozdrawiam
Grzegorz |
|
| ID posta:
435774
|
|
|
|
|
|
|
hurgadion
ExcelSpec
Wersja: Win Office 2021
Pomógł: 1214 razy Posty: 2803
|
Wysłany: 11-06-2024, 18:33
|
|
|
Hej,
podaję nieoptymalne makro (lepsze byłoby oparte na tablicach, na większej ilości danych będzie zauważalna spora różnica w czasie działania), ale zawsze to coś, co chyba działa (przetestuj !):
Kod: |
Sub trans()
Dim a&, x&, i&, j&, k&
Range("C21:H61").ClearContents
Range("J21:K61").ClearContents
x = 21
a = Cells(Rows.Count, 3).End(xlUp).Row
For i = 5 To a
For j = 10 To 18
If Cells(i, j) <> "" Then
For k = 3 To 8
Cells(x, k).Value = Cells(i, k).Value
Next k
End If
If j = 10 And Application.IsNumber(Cells(i, j).Value) Then
Cells(x, 11).Value = Cells(i, j).Value
x = x + 1
Else
If Cells(i, j).Value <> "" Then
If Application.IsNumber(Cells(i, j).Value) Then
Cells(x, 11).Value = Cells(i, j).Value
x = x + 1
Else
Cells(x, 10).Value = Cells(i, j).Value
Cells(x, 11).Value = Cells(i, j + 1).Value
j = j + 1
x = x + 1
End If
End If
End If
Next j
Next i
End Sub
|
Pozdrawiam
Transpozycja 2024-06-11.sol.xlsm
|
Pobierz Plik ściągnięto 26 raz(y) 24.29 KB |
|
|
| ID posta:
435782
|
|
|
|
|
|
minijack
ExcelSpec
Wersja: Win Office 2019
Pomógł: 218 razy Posty: 501
|
Wysłany: 11-06-2024, 18:46
|
|
|
wyszło mi coś takiego
spróbuj czy działa poprawnie
zasada jest taka
zaznaczasz dane czyli w tym przykładzie J5:X16
odpalasz makro (przycisk w "arkusz2"
podajesz adres komórki od której dane mają się zapisywać (będzie to lewy górny róg tablicy)
jeżeli chodzi o szybkość u mnie test dla 1000 wierszy i 5000 kolumn pełnych trwał ok3 minut
ale ze względu na ilość wierszy po transformacji kolejne dane są układane w kolumnach obok
Transpozycja 2024-06-11.xlsm
|
Pobierz Plik ściągnięto 27 raz(y) 26.61 KB |
|
|
| ID posta:
435783
|
|
|
|
|
|
greg2009
Exceloholic
Wersja: Win Office 365
Posty: 187
|
Wysłany: 12-06-2024, 16:14
|
|
|
Panowie hurgadion, oraz minijack
Dziękuję Wam za pomoc i od razu spieszę z prośbą o poprawki Ogólnie Wasze prace działają jednak wykryłem rzeczy, które trzeba poprawić.
Od razu też dodam za co przepraszam, że nie podałem (nie zauważyłem), że może też być opcja, że oprócz tego, że mamy pary lub same liczby, to jednak zdarza się, że są też obok siebie np. same wyrazy... Przyjmę, że para To (Tekst) i (Liczba)
Kolego hurgadion
W twoim kodzie jeżeli za parą jest np więcej niż dwie liczby (same liczby) to obcina i tych kolejnych nie skopiuje, czyli jeżeli jest układ taki (Teskt1)+(Liczba1),(Liczba2),(Liczba3),(Liczba4), to niestety dwa ostatnie wystąpienia omija
Z kolei w waszych dwóch makrach jest też ten sam problem, że gdy pojawi się układ taki (Tekst1),(Tekst2),(Tekst3) to niestety wchodzą obok siebie w wyniku działania makr.
Prośba moja jest taka, podam możliwości wystąpień tych "Par" i "solo". Mogą być np. takie :
1 przykład
(Teskt1),(Liczba1),(Liczba2),(Liczba3),(Liczba4),(Tekst2),(Liczba5)
zatem wynik powinien być taki
(Teskt1),(Liczba1)
(Pusto),(Liczba2)
(Pusto),(Liczba3)
(Pusto),(Liczba4)
(Tekst2),(Liczba5)
2 przykład
(Teskt1),(Liczba1),(Liczba2),(Liczba3),(Liczba4),(Tekst2),(Teskt3),(Tekst4),(Tekst5),(Liczba5)
zatem wynik powinien być taki
(Teskt1),(Liczba1)
(Pusto),(Liczba2)
(Pusto),(Liczba3)
(Pusto),(Liczba4)
(Tekst2),(Pusto)
(Tekst3),(Pusto)
(Tekst4),(Pusto)
(Tekst5),(Liczba5)
Mam nadzieję, że jest to zrozumiałe. Innymi słowy tak:
Jeżeli za liczbą na prawo jest też liczba, to kopiuj pod kolumną z liczbami. Jeżeli za liczbą jest tekst i kolejny tekst i np jeszcze kolejny kolejny tekst (bez pary z liczbą), to kopiuj ale pod kolumną z tekstem, a nie do kolumny z liczbami.
Ewentualnie dopytajcie jeżeli źle się wyraziłem przez kolejnym wkładem w pracę
Dziękuję Punkty dla Was na początek |
_________________ Dziękuję i pozdrawiam
Grzegorz |
|
| ID posta:
435793
|
|
|
|
|
|
minijack
ExcelSpec
Wersja: Win Office 2019
Pomógł: 218 razy Posty: 501
|
Wysłany: 12-06-2024, 16:36
|
|
|
załącznik z poprawką
Transpozycja 2024-06-11.xlsm
|
Pobierz Plik ściągnięto 29 raz(y) 28.97 KB |
|
|
| ID posta:
435794
|
|
|
|
|
|
hurgadion
ExcelSpec
Wersja: Win Office 2021
Pomógł: 1214 razy Posty: 2803
|
Wysłany: 12-06-2024, 16:49
|
|
|
greg2009: wydaje mi się, że makro dobrze działa w ustalonym zakresie według pierwotnych założeń, ale może się zdarzyć, że odpalisz makro z przykładem, który wychodzi poza kolumnę R, wtedy ucina... Trzebaby zwiększyć zakres działania makra, ja na razie spasuję, ponieważ minijack podał lepsze rozwiązanie (tablicowe !) i już nawet podał zasugerowaną przez Ciebie poprawkę (szybki jest), pozdrawiam |
|
| ID posta:
435795
|
|
|
|
|
|
greg2009
Exceloholic
Wersja: Win Office 365
Posty: 187
|
Wysłany: 12-06-2024, 16:59
|
|
|
Panowie dziękuję bardzo
"hurgadion" za chęci, bo zapewne byś poprawił swoją pracę
"minijack" za pracę i szybkość w działaniu
Twoja poprawka działa perfect, sprawdzałem różne założenia
Jednak mam ostatnią prośbę, bo testując jeszcze jedno założenie (ostatnie już) przyszło mi do głowy, a może się zdarzyć w tym gąszczu danych... Mianowicie jak pomiędzy komórkami będzie jakaś pusta komórka, to pomija pewien zakres danych... Czy chciałoby Ci się spojrzeć jeszcze na to. Czyli w wierszu po za parami, solówkami mamy np. przerwę (pustą komórkę bez danych), wtedy pomija część danych
Dziękuję serdecznie |
_________________ Dziękuję i pozdrawiam
Grzegorz |
|
| ID posta:
435797
|
|
|
|
|
|
minijack
ExcelSpec
Wersja: Win Office 2019
Pomógł: 218 razy Posty: 501
|
Wysłany: 12-06-2024, 20:49
|
|
|
proszę bez omijania pustych komórek
Transpozycja 2024-06-11.xlsm
|
Pobierz Plik ściągnięto 32 raz(y) 29 KB |
|
|
| ID posta:
435799
|
|
|
|
|
|
greg2009
Exceloholic
Wersja: Win Office 365
Posty: 187
|
Wysłany: 13-06-2024, 14:02
|
|
|
"minijack" serdecznie dziękuję
Jak spojrzę w kod, to jest tam Armagedon w sensie - pozytywny profesjonalizm
Kilka fajnych rozwiązań. Oczywiście z każdej "Waszej" pracy z forum człowiek się uczy i sporo zdziałał już czerpiąc, asymilując do swojej pracy Wasze rozwiązania , ale wiedzy zawsze brakuje Tym bardziej Tobie (Wam) dziękuję za fajne makro, Ukłony
Wielkie Dziękuję
|
_________________ Dziękuję i pozdrawiam
Grzegorz |
|
| ID posta:
435819
|
|
|
|
|
|
greg2009
Exceloholic
Wersja: Win Office 365
Posty: 187
|
Wysłany: 15-06-2024, 13:46
|
|
|
Kolego "minijack"
Wracam z prośbą o modyfikację kodu, gdyż pomimo chęci nie wiem, gdzie dokonać zmian w twoim kodzie, by osiągnąć to co zamierzam... Załączony przykład miał być zobrazowaniem i oczywiście działa, ale w moim oryginalnym pliku jest nieco inny układ kolumn... Mianowicie :
Zakres kolumn (od indeksu) w oryginalnym pliku jest od-do kolumny A:HZ (a w przykładzie był C:I).
Czy mógłbyś wskazać co podmieniać w kodzie (lub dodać uniwersalność jak dla przykładu zrobiłeś możliwość zaznaczenia obszaru do transpozycji "selection"), by móc wskazać co ma być skopiowane też poniżej, czyli w przykładzie jest to zakres kolumn C:I, a ja bym chciał np. A:HZ ?
Próbowałem modyfikować, ale bez dobrego skutku, bo słaby jeszcze jestem, by każde makro bez wyjątku zaadoptować
Z góry dziękuję |
_________________ Dziękuję i pozdrawiam
Grzegorz |
|
| ID posta:
435863
|
|
|
|
|
|
minijack
ExcelSpec
Wersja: Win Office 2019
Pomógł: 218 razy Posty: 501
|
Wysłany: 16-06-2024, 21:49
|
|
|
sprawdź sobie w załączniku
wersja z dowolną długością"opisu" np."a:hz"
zaznaczasz dane do transpozycji
Wszystkie kolumny na lewo od zaznaczenia będą "opisem"
dołożyłem też dodatkowy warunek w pętli bo wywalało błąd gdy zaznaczenie kończyło się tekstem(nie było jak sprawdzić co jest po prawej )
Transpozycja 2024-06-11(1).xlsm
|
Pobierz Plik ściągnięto 28 raz(y) 33.73 KB |
|
|
| ID posta:
435877
|
|
|
|
|
|
greg2009
Exceloholic
Wersja: Win Office 365
Posty: 187
|
Wysłany: 17-06-2024, 05:57
|
|
|
Dziękuję serdecznie "minijack"
Ukłony za czas, wiedzę, pomoc
Działa perfecto |
_________________ Dziękuję i pozdrawiam
Grzegorz |
|
| ID posta:
435878
|
|
|
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|
Strona uĹźywa plikĂłw cookies.
Kliknij tutaj, Ĺźeby dowiedzieÄ siÄ jaki jest cel uĹźywania cookies oraz jak zmieniÄ ustawienia cookie w przeglďż˝darce.
KorzystajÄ
c ze strony uĹźytkownik wyraĹźa zgodÄ na uĹźywanie plikĂłw cookies, zgodnie z bieĹźÄ
cymi ustawieniami przeglÄ
darki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe
|