Szukaj
Close this search box.
Odtwórz wideo

Wyodrębnianie danych przy pomocy makr

Udostępnij ten film:

Ocena tego filmu:

5/5 - (4 ocen)

Poprzednie dwa odcinki poświęciłem tabelom, ale czasem naszym głównym problemem jest przekształcenie dostępnych informacji w tabelę. Jeżeli na przykład nasze dane są ukryte w nieregularnym tekście i jest go bardzo dużo praca może nam zająć długie godziny. Ale od czego mamy makra. Nasze ćwiczenie przeprowadzimy na  standardowym tekście Lorm Ipsum z nieregularnie wplecionymi danymi o cenach różnych pojazdów które zaznaczyłem na żółto.   

……………………..

.

Naszym pierwszym zadaniem będzie pozbycie się wszystkich linijek które nie zawierają na początku słowa „Pojazd”. Zacznijmy jak zawsze od zarejestrowania prostego makra które tym razem kasuje jedną linijkę. A więc Menu Widok -> Makra -> Zarejestruj makro

.

.

Wybierzmy nazwę makra np.: „Konwersja_tekstu_do_tabeli”

.

.

A następnie skasujmy 4 linię, zaznaczając ją, klikając prawym klawiszem myszy i wybierając Usuń

.

.

Następnie zatrzymajmy rejestrowanie makra Menu Widok -> Makra -> Zatrzymaj rejestrowanie oraz zobaczmy nasze makro Menu Widok -> Makra -> Wyświetl makra

.

.

To co zarejestrował Excel wygląda następująco:

Sub Konwersja_tekstu_do_tabeli()

‘ Konwersja_tekstu_do_tabeli Makro


Rows(“4:4”).Select
Selection.Delete Shift:=xlUp
End Sub

‘definicja makra
komentarz
komentarz
komentarz

‘zaznaczenie 4 wiersza
‘skasowanie zaznaczonego wiersza
‘zakończenie makra
 

Którego uruchomienie da nam już całkiem przyzwoitą choinkę wraz z Excel zarejestrował je w taki sposób jak wykonywaliśmy czynności jednak sam umie tą operację kasowania pojedynczego wiersza wykonać w jednym wierszu kodu.

Rows(4).Delete

Teraz zastanówmy się and algorytmem naszego makra czyli opisem kolejnych czynności które powinno ono wykonać. Chcemy aby: dla każdej linijki sprawdziło ono czy jej początek równa się „Pojazd” a jeżeli nie to ją skasowało.

Z trzeciego odcina mojego poradnika wiemy już że :

„Cells(W,K) =A” nadaje wartość A komórce o wierszu W i kolumnie K

Cells(1,2)=3 oznacza przypisanie komórce B1 wartości 3

Jednocześnie samo Cells(W,K) oznacza wartość komórki w wierszu W i kolumnie K

„For Z=X to Y

Next” powtarza zawarte pomiędzy liniami For oraz Next linie kodu zwiększając za każdym razem zmienną Z o jeden od wartości X aż do Y.

Czyli np. For i=1 to 10

                Cells(i,1)=i

Next oznacza że i po kolei przyjmuje wartości 1,2,3,4 …. 10 wpisując te wartości w komórki A1,A2, A3, A4, ….A10

Teraz potrzebne będą nam jeszcze funkcje :

“If Warunek Then

Kod 1

Else

Kod 2

End If

Która realizuje Kod 1 gdy postawiony Warunek jest spełniony a Kod 2 gdy nie

Czyli np.

If X>0 Then

X=X+1

Else

X=X-2

End If

Sprawdza czy zmienna X jest większa od 0 i dodaje do niej 1 jeżeli jest a odejmuje 2 jeżeli nie jest

Left(Tekst,Ilość_Znaków)która zwraca Ilość_Znaków Tekstu od lewej strony

Czyli np.:

Tekst=Left(„Wesołych Świąt,8) przypisze zmiennej Tekst wartość „Wesołych”

Split (Tekst,”znak rozdzielający”)” która dziali tekst na szereg mniejszych tekstów które w tekście źródłowym były rozdzielone wskazanym znakiem

Czyli np.

Wynik = Split(„Anna;Adam;Andrzej;Waldemar,”;”) spowoduje przypisanie tabeli Wynik poszczególnych imion a w szczególności Wynik(0)=”Anna”,  Wynik(1)=”Adam”, Wynik(3)=”Andrzej”, Wynik(4)=”Waldemar”

Ostatnią potrzebną nam do realizacji zadania rzeczą będzie definicja tabeli tekstów:

Dim Tabela() As String       gdzie Tabela jest nazwą tabeli a String określa że chodzi o tabelę tekstów.

Teraz mamy już komplet wiedzy teoretycznej do stworzenia naszego makra. Więc piszmy

.

Sub Konwersja_tekstu_do_tabeli()

‘ Konwersja_tekstu_do_tabeli Makro


L = 1
For i = 1 To 100
If Left(Cells(L,1),6) = “Pojazd”Then
L = L + 1
Else
Rows(L).Delete
End If
Next
End Sub

‘definicja makra
komentarz
komentarz
komentarz

‘numer linii od której zaczynamy
‘przez 100 kolejnych linii
‘jeżeli pierwsze 6 znaków tekstu równa się “Pojazd”
‘idziemy do następnej linii
 ‘a jeżeli nie to
‘kasujemy linię
‘następne i / linia

‘zakończenie makra
 

Po jego uruchomieniu dostaniemy następujący wynik

.

Jak widać zniknęły nam wszystkie zbędne linie ale przydało by się jeszcze rozdzielić do osobnych kolumn opisy pojazdów od opisów cen. Zastosujmy więc funkcję split

Sub Konwersja_tekstu_do_tabeli()

‘ Konwersja_tekstu_do_tabeli Makro
Dim Linia() As String                                 
L = 1                                              
For i = 1 To 100                                   
If Left(Cells(L, 1), 6) = “Pojazd” Then      
Linia = Split(Cells(L, 1), “,”)            
Cells(L, 2) = Linia(0)                     
Cells(L, 3) = Linia(1)                     
L = L + 1                                  
Else
Rows(L).Delete                             
End If
Next
End Sub

‘definicja makra
komentarz
komentarz
‘definicja tabeli tekstów o nazwie Linia
‘numer linii od której zaczynamy
‘przez 100 kolejnych linii
‘jeżeli pierwsze 6 znaków tekstu równa się “Pojazd”
‘wczytujemy dane linii rozdzielone przecinkami do tabeli Linia
‘pierwszą wartość tabeli Linia wpisujemy w kolumnę 2
‘drugą wartość  tabeli Linia wpisujemy w kolumnę 3
‘idziemy do następnej linii
‘a jeżeli nie to
‘kasujemy linię
‘następne i / linia


‘zakończenie makra

Tym razem uzyskamy następujący efekt

.

Jest dużo lepiej ale jeszcze przydało by się pozbyć napisów Pojazd i Cena. Zobaczcie, że tym razem nasze teksty od faktycznych danych rozdzielone są dwukropkiem. Wykorzystamy ten fakt i użyjemy jeszcze raz funkcję Split  w następujący sposób

Sub Konwersja_tekstu_do_tabeli()

‘Konwersja_tekstu_do_tabeli Makro
Dim Linia() As String                                 
Dim Pojazd() As String 
Dim Cena() As String                          
L = 1                                                    
For i = 1 To 100                                   
If Left(Cells(L, 1), 6) = “Pojazd” Then                
Linia = Split(Cells(L, 1), “,”)   

Pojazd = Split(Linia(0), “:”)

Cena = Split(Linia(1), “:”)               

Cells(L, 2) = Pojazd(1)                    
Cells(L, 3) = Cena(1)                                         
L = L + 1                                  
Else
Rows(L).Delete                             
End If
Next
End Sub

‘definicja makra
komentarz
komentarz
‘definicja tabeli tekstów o nazwie Linia
‘definicja tabeli tekstów o nazwie Pojazd
‘definicja tabeli tekstów o nazwie Cena
‘numer linii od której zaczynamy
‘przez 100 kolejnych linii
‘jeżeli pierwsze 6 znaków tekstu równa się “Pojazd”
‘wczytujemy dane linii rozdzielone przecinkami do tabeli Linia
‘wczytujemy dane Pojazdu rozdzielone dwukropkiem z pierwszej wartości tabeli Linia
‘wczytujemy dane Cen rozdzielone dwukropkiem z drugiej wartości tabeli Linia
‘drugą wartość  tabeli Pojazd wpisujemy w kolumnę 2
‘drugą wartość tabeli Linia wpisujemy w kolumnę 3
‘idziemy do następnej linii
‘a jeżeli nie to
‘kasujemy linię
‘następne i / linia

‘zakończenie makra

Teraz już otrzymamy dokładnie to co chcieliśmy czyli dane pojazdów oraz ich ceny w osobnych kolumnach.

.

To bardzo krótkie makro może umożliwić wam konwersję danych tekstowych na konkretne wartości niezależnie od ich ilości i stopnia „zaśmiecenia”.

Zapraszam Was do korespondencji na temat makr i wszystkiego co się wiąże z Excelem a co sprawia wam jakieś problemy na adres konrad.pogodz@itch.pl

Przekształcanie dostępnych informacji w tabelę.
Film otagowano jako:
Poznaj autora wideo
Konrad Pogódź
Konrad Pogódź
Wiceprezes Zarządu
Pobierz darmowy materiał szkoleniowy

Dzięki darmowym materiałom szkoleniowym będziesz mógł przećwiczyć nabytą wiedzę i sprawdzić ją w praktyce. Pobierz i ćwicz natychmiast.

Odkryj podobne filmy

Zgłoszenie serwisowe

Dane firmy

Masz pytanie? Napisz do nas