vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest środa, 08 września 2010 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

porównywanie części activecell w dwóch kolumnach


otwartyotwarty rozpoczął: kilis postów: 8



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


Sortuj posty: z