napisał: kilis postów: 12
umieszczony: 15 marca 2010 22:23
|
|
Dzięki serdeczne za pomoc :)
Teraz wszystko zrobiłem jak trzeba... |
|
|
Reklama

|
|
napisał: Trebor postów: 616
umieszczony: 15 marca 2010 18:01
edytowany: 15 marca 2010 18:08
|
|
| Bez problemu możesz z ciągu wyłuskać dowolny znak. Można do tego wykorzystać funkcję fragment tekstu czyli Mid. Jeśli chcesz wyciągnąć 3 znak to będzie to wyglądało tak: Mid(ActiveCell, 3, 1)
Co do mojej propozycji to już tłumaczę:StrReverse(Cells(1, 1)) ten fragment odwraca ciąg (np. Trebor odczyta jako roberT).
Val zwróci nam z odwróconego ciągu tylko wartość liczbową czyli:Val(StrReverse(Cells(1, 1))) to będzie wartość liczbowa z komórki (1,1) od lewej strony.
Przykładowo: z XX123 wyciągniemy 321 (odwrócony)
Jeśli jeszcze raz odwrócimy ciąg to otrzymamy 123.
Taki ciąg zapisałem w zmiennej "a". W następnej linii funkcją replace zamieniam w całym ciągu z komórki (1,1) ciąg 123 na "".
Po takiej operacji pozostaje z przykładowego ciągu XX do którego dopisuję 123 powiększone o 1.
Replace(Cells(1, 1), a, "") & a + 1
& znak ten oznacza łączenie dwóch ciągów.
Pozdrawiam |
|
|
napisał: kilis postów: 12
umieszczony: 15 marca 2010 17:30
|
|
Niestety nie znam na tyle VBA żeby wiedzieć co te dwie linie mają zdziałać.
Rozumiem że nie ma takiej opcji żeby wskazać konkretny znak w komórce zamiast ciągu ?
Zamiast left(activecell, 3) co zwraca mi 3 znaki wartości z lewej strony komórki,
chcę żeby zwrócił mi wartość trzeciego znaku...
Byłem przekonany że jest taka opcja bez karkołomnych ustawiań zmiennych i innych... |
|
|
Reklama

|
|
napisał: Trebor postów: 616
umieszczony: 14 marca 2010 20:38
|
|
| Sprawdź takie dwie linie a = StrReverse(Val(StrReverse(Cells(1, 1))))
MsgBox Replace(Cells(1, 1), a, "") & a + 1
Pozdrawiam |
|
|
napisał: kilis postów: 12
umieszczony: 14 marca 2010 13:37
|
|
Zrobiłem taki test i jestem w stanie określić czy rejs jest 3 czy 4 cyfrowy ale ciągle nie wiem jak sprawdzić czy
desygnator lini jest 2 czy 3 literowy.
Do Until IsEmpty(ActiveCell)
If IsNumeric(Right(ActiveCell, 4)) = False Then
ActiveCell.Offset(0, 2) = "3 cyfrowy"
ActiveCell.Offset(1, 0).Activate
Else
ActiveCell.Offset(0, 2) = "4 cyfrowy"
ActiveCell.Offset(1, 0).Activate
End If
Loop
Mogę dodać do linii if jeszcze and "że od lewej 3 znak jest numeryczny to oznacza że desygnator jest 2 literowy jeżeli nie jest 3 znak numeryczny
to wtedy jest desygnator 3 literowy.
Tylko nie mogę znaleźć jak wskazać konkretny znak (numer od lewej czy prawej) |
|
|
Reklama

|
|
napisał: kilis postów: 12
umieszczony: 14 marca 2010 12:19
|
|
Nie wiem czy to mi wystarczy. Zrobiłem już sobie te "rotacje" ale muszę wskazać desygnator linii lotniczej oraz rodzaj numeru rejsu.
Są 4 przypadki:
XXYYY
XXYYYY
XXXYYY
XXXYYYY
gdzie X to linia lotnicza i jest to wartość literowa np LH, LO, KBR, AMV
a Y to wartość liczbowa czyli numer rejsu
co daje 4 możliwości
JP938
LH3301
SRN702
AMV4521
rozwiązanie mam takie że rozdzielam x od y i do y dodaje 1 bo rejs odlotowy ma wartość większą o jeden.
Nie mogę dodać do wartości alfanumerycznej stąd dzielę na 2 części a potem ustalam zmienną jako
' dla opcji pierwszej
Dim rejs
rejs = Left(ActiveCell, 2) & Right(ActiveCell, 3) + 1
i odpowiednio dla kolejnych. Muszę jednak wskazać jakich linii ma szukać i ile mają znaków.
Potem porównuję kolumnę z odlotami z wartością zmiennej
If rejs = Activecell Then
i podejmuję odpowiednią akcję żeby poustawiał mi w arkuszu jak trzeba
Chodzi mi o to żeby sam rozpoznawał czy jest to XXYYYY czy XXXYYY i inne i zwracał mi w postaci
zmiennej np rejs jak zrobiłem z numerem o 1 większym i tu mam problem.
Mogę zrobić 4 różne warianty i postarać się określić w każdym z nich odpowiednia linię i jakim formatem rejsu się charakteryzuje.
Chcę łatwiej. Może opcja IsNumeric ? |
|
|
napisał: Trebor postów: 616
umieszczony: 14 marca 2010 08:05
|
|
Wiem, że forum dotyczy VBA, ale może wystarczy zwykła formuła np.:
=WYSZUKAJ.PIONOWO(LEWY(A1;DŁ(A1)-1) & PRAWY(A1)+1;$I$1:$I$6;1;0)
Pozdrawiam |
|
|
napisał: kilis postów: 12
umieszczony: 13 marca 2010 15:50
edytowany: 13 marca 2010 16:03
|
|
mam dwie kolumny z danymi sa to numery rejsów samolotów format XX1111
dwa pierwsze znaki to litery a następne 3 lub 4 to liczby np LH3443
w jednej kolumnie mam przyloty a w drugiej odloty
potrzebuję wyselekcjonować rejsy z przylotów i połączyć je z odlotami.
przykład
XX1234
XX3445
XX545
XX345
XX5678
DD3456
XX564
XX678
DD5675
XX2311
XX45667
XX349
DD3457
XX8888
DD5676
XX777
(to co jest niżej jest kilka kolumn obok po prawej stronie ale nie mogę tego zobrazować za bardzo)
teraz chcę odnaleźć wszystkie rejsy oprócz tych XX i znaleźć odpowiednik w drugiej kolumnie i wstawic go
w tym samym odpowiadającym wierszu czyli
DD3456 DD3457
DD5675 DD5676
robiłem pętle i wynajduję te rejsy które chcę left(activevecell, 2) = DD itp działa
ale potem jest problem z activecell żeby odnaleźć odpowiedni rejs. Pasują do siebie te rejsy gdzi e po lewej 4 lub 5 znakow jest takie
same a ostatni jest o 1 większy.
Activecell się zmienia i nie wiem jak zablokować.
Próbowałem z Dim testuję teraz case. Robiłem input box i nawet działało bo sam wpisywałem rejs szukany dla tego odnalezionego ale
potem sam zapętlałem sie w pętlach...
jakieś sugestie ? |
|
|
 wstecz 1 dalej  wszystkich stron: 1
|