Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 75908 Skopiuj do schowka Układ danych z poziomego na pionowy
Autor Wiadomość
greg2009 
Exceloholic


Wersja: Win Office 365
Posty: 178
Wysłany: 11-06-2024, 12: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 20 raz(y) 17.3 KB

_________________
Dziękuję i pozdrawiam
Grzegorz
ID posta: 435774 Skopiuj do schowka
 
 
hurgadion 
ExcelSpec



Wersja: Win Office 2021
Pomógł: 1194 razy
Posty: 2746
Wysłany: 11-06-2024, 19: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 :lol:

Transpozycja 2024-06-11.sol.xlsm
Pobierz Plik ściągnięto 7 raz(y) 24.29 KB

ID posta: 435782 Skopiuj do schowka
 
 
minijack 
ExcelSpec


Pomógł: 202 razy
Posty: 461
Wysłany: 11-06-2024, 19: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 7 raz(y) 26.61 KB

ID posta: 435783 Skopiuj do schowka
 
 
greg2009 
Exceloholic


Wersja: Win Office 365
Posty: 178
Wysłany: 12-06-2024, 17: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 Skopiuj do schowka
 
 
minijack 
ExcelSpec


Pomógł: 202 razy
Posty: 461
Wysłany: 12-06-2024, 17:36   

załącznik z poprawką

Transpozycja 2024-06-11.xlsm
Pobierz Plik ściągnięto 7 raz(y) 28.97 KB

ID posta: 435794 Skopiuj do schowka
 
 
hurgadion 
ExcelSpec



Wersja: Win Office 2021
Pomógł: 1194 razy
Posty: 2746
Wysłany: 12-06-2024, 17: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 :lol:
ID posta: 435795 Skopiuj do schowka
 
 
greg2009 
Exceloholic


Wersja: Win Office 365
Posty: 178
Wysłany: 12-06-2024, 17: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 Skopiuj do schowka
 
 
minijack 
ExcelSpec


Pomógł: 202 razy
Posty: 461
Wysłany: 12-06-2024, 21:49   

proszę bez omijania pustych komórek

Transpozycja 2024-06-11.xlsm
Pobierz Plik ściągnięto 12 raz(y) 29 KB

ID posta: 435799 Skopiuj do schowka
 
 
greg2009 
Exceloholic


Wersja: Win Office 365
Posty: 178
Wysłany: 13-06-2024, 15: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 :-)

:clap :clap :clap

Wielkie Dziękuję :-)

:clap :clap :clap
_________________
Dziękuję i pozdrawiam
Grzegorz
ID posta: 435819 Skopiuj do schowka
 
 
greg2009 
Exceloholic


Wersja: Win Office 365
Posty: 178
Wysłany: 15-06-2024, 14: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 Skopiuj do schowka
 
 
minijack 
ExcelSpec


Pomógł: 202 razy
Posty: 461
Wysłany: 16-06-2024, 22: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 7 raz(y) 33.73 KB

ID posta: 435877 Skopiuj do schowka
 
 
greg2009 
Exceloholic


Wersja: Win Office 365
Posty: 178
Wysłany: 17-06-2024, 06:57   

Dziękuję serdecznie "minijack" :-)

Ukłony za czas, wiedzę, pomoc :-)
Działa perfecto :-)
_________________
Dziękuję i pozdrawiam
Grzegorz
ID posta: 435878 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

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