Cümlələrdən İstənilən Mətni necə Ayırmaq olar?

FIND

Mətnlər üzərində iş görərkən əsasən ortaq nöqtələr üzərindən gedilir. Yəni, mətn içərisindən müəyyən kəlimələri ayırmaq lazımdırsa, o zaman həmin mətnlərin ortaq xüsusiyyətləri nələrdir ona baxmaq lazımdır. Oxşarlıq nələrdə ola bilər:

  • həmin mətnlər eyni formadadır (tarix, məhsul kodu və s.)
  • kəlimələr cümlədə eyni sıradadırlar,
  • ayırmaq istədiyimiz kəlimələr eyni simvollarla başlayır
  • kəlimələr mötərizə (vergül, boşluq və s.) arasındadır və s.

Həmin ortaq xüsusiyyət nə qədər çoxdursa, kəlimələr üzərində əməliyyatlar bir o qədər asan və qurulacaq funksiyalar da sadə olacaqdır.

Bu məqalədə əvvəlcə standart formada olan və daha sonra da dəyişkən uzunluqdakı mətnlərin cümlədən çıxarılmasına baxacayıq.

Standart formada olan mətnlər
Cümlədən tarix məlumatının çıxarılması

Şəkildəki cümlələrin içərisindən tarix məlumatlarını ayırmaq istəyirik. Həmin tarix məlumatları fərqli rəqəmlərdən ibarətdir, cümlənin fərqli hissələrində ola bilər və tarix məlumatları bilinən hər hansı simvollar daxilində deyil. Ancaq, bütün tarix məlumatlarının forması eynidir. Yəni, dd.mm.yyyy (gun-ay-il) formatındadırlar. Biz həmin formatdan istifadə edərək tarix formatlarını mətnin içərisindən ayıra bilirik. Bunun üçün isə mətn simvollarından istifadə edəcəyik.

Tarix formatını funksiya içərisində “??.??.????” kodları ilə tanıtmaq mümkündür. (Həmin simvollar haqqında daha ətraflı məlumatı bu linkdən oxuya bilərsiniz). İlk əvvəl SEARCH funksiyası ilə tarixin cümlədəki yerini tapırıq.

=SEARCH("??.??.????";A2)                        "Nəticə: 43"

Funksiya ilk mətndə tarix formatını axtardı və 43-cü sırada olduğunu tapdı. İkinci addım olaraq isə MID funksiyası ilə tarixi mətnin içərisindən ayıracayıq.

=MID(A2;SEARCH("??.??.????";A2);10)                   "Nəticə: 06.02.2012"

Əldə olunan 43 rəqəmini MID funksiyasının ikinci arqumentində istifadə etdik. Yəni, “A2” xanasında (1. arqument)  olan mətnin 43-cü sirasından (2. arq.) başlayaraq 10 simvolu (3. arq.) ayırdıq. 10 simvol isə, tarixlərin toplam simvol sayısıdır (nöqtə ilə bərabər).

Eyni məsələ bu şəkildə də həll oluna bilər

=LEFT(SUBSTITUTE(A2;LEFT(A2;SEARCH("??.??.????";A2)-1);"");10)       "Nəticə: 06.02.2012"
Cümlədən kodların çıxarılması

Bu nümunədə də yenə əsas nüans “məhsul kodları”nın formasıdır. Kodun formatı isə “????.???.??” şəklindədir. Eyni funksiyaları bu formata görə quracayıq.

=MID(A2;SEARCH("????.???.??";A2);11)     "Nəticə: MM01.001.01"

İkinci həll yolu

=LEFT(SUBSTITUTE(A2;LEFT(A2;SEARCH("????.???.??";A2)-1);"");11)

Qeyd: funksiyalarda SEARCH əvəzinə FIND istifadə edilmir. Çünki, FIND funksiyası böyük və kiçik hərfləri tanıdığı kimi, mətn simvollarını (? *) da eyni ilə tanıyır. Yəni, “?” simvolunu istənilən bir simvol kimi yox, “?” özü kimi tanıyır.

 

Fərqli uzunluqda olan mətnlərın çıxarılması

Burda isə biz invoys nömrələrini ayırmaq istəyirik. Ancaq invoys nömrələri standart formata uyğun gəlmir, yəni uzunluqlar fərqlidir. Biz yenə ortaq xüsusiyyət tapıb onun əsasında funksiya qurmalıyıq.

  • mətnlər INV simvolları ilə başlayır,
  • invoys nömrələr vergül işarələrinin arasındadır.

Bu iki ortaq xüsusiyyət üzərindən funksiyamızı quracayıq. Əvvəlcə “INV” ilə başlayan cümlənin neçənci sırasında olmasını tapmalıyıq.

=SEARCH("INV";A2)        "Nəticə: 28"

İnvoys nömrələrinin neçənci sırada olmalarını tapan funksiyamız hazırdır. İndi isə, həmin invoys nömrələrinin uzunluqlarını tapmaq lazımdır. Bu isə, “INV” mətni ilə bir sonrakı vergül işarəsinə qədər olan simvol sayısıdır. Yəni, bir sonrakı mətnin sıra sayısını “INV” mətninin sıra sayısından çıxarsaq əldə edəcəyimiz rəqəm invoys nömrələrinin uzunluğu olacaqdır. Misal üçün, 39 (bir sonrakı vergül) – 28 = 11 bizim invoys uzunluğumuz olacaq. Əvvəlcə vergülün sıra sayısını tapaq

FIND(",";A2;SEARCH("INV";A2))          "Nəticə: 39"
FIND(",";A2;28)

Bildiyimiz kimi, FIND funksiyası içərisində “,” işarəsini axtardığım;z zaman ilk qarşısına çıxacaq vergülün sıra sayısını verəcək bizə. Ancaq biz “INV” mətnindən sonrakı vergülün sıra sayısını istəyirik. Bu səbəbdən, funksiyanın üçüncü arqumentinə üstdəki funksiyanı əlavə etdim. Yəni, “,” işarəsini 28-ci sıradan sonra axtar. Bu zaman biz 39 rəqəmini əldə edəcəyik.

İndi isə, əldə etdiyimiz iki rəqəmin fərqini tapacayıq. Bu şəkildə invoys nömrələrinin uzunluğunu əldə edirik.

FIND(",";A2;SEARCH("INV";A2))-SEARCH("INV";A2)            "Nəticə: 11"

Artıq əlimizdə lazım olan bütün rəqəmlər var. İndi isə bu rəqəmləri MID içərisində istifadə edib invoys nömrəsini çıxarırıq.

=MID(A2;28;39-28)

=MID(A2;SEARCH("INV";A2);FIND(",";A2;SEARCH("INV";A2))-SEARCH("INV";A2))     "Nəticə: INV 315 252"

Bu mərhələdə, əldə etdiyimiz rəqəmləri MID içərisində istifadə etdik. Funksiya dili ilə MID funksiyasına dedik ki, “A2” xanasında olan mətnin 28-cı sırasına get və ordan başlayaraq 11 simvol ayır.

İkinci həll yolu

=LEFT(SUBSTITUTE(A2;LEFT(A2;FIND("INV";A2)-1);"");FIND(",";SUBSTITUTE(A2;LEFT(A2;FIND("INV";A2)-1);""))-1)

Burda isə, “INV” mətninə qədər olan hissəni SUBSTITUTE ilə sildik və ilk vergül simvoluna qədər olan mətni LEFT funksiyası ilə ayırdıq.

Digər sadə mətn əməliyyatları və məqalədə istifadə olunan funksiyalar haqqında aşağıdakı linklərdən oxuya bilərsiniz

Mətn Funksiyalari – Başlanğıc Səviyyə (LEFT, RIGHT, MID, FIND, SEARCH)

Mətn (Text) Funksiyaları (LEN, SUBSTITUTE, REPLACE, CODE, CHAR, EXACT)

Ad və Familiyanı Funksiyadan İstifadə edərək Ayırmaq – 3 Ayrı Həll Yolu ilə

Exceldə Mətn İşarələrinin (Wildcard – *,?,~,=) Istifadəsi

Array Formulalar
Hesablanmış dəyərə əsasən LOOKUP verilməsi – Array (+Video)

Biz normal şərtlərdə LOOKUP verərkən sadə məntiqlə axtarılan dəyərin qarşısındakı (və ya hərhansı tərəfindəki) məlumatları əldə etmək istəyirik. Bəs müəyyən şərtlərə əsasən hesablanmış rəqəmlərin qarşısındakı məlumatları necə gətirmək olar? Bugünkü məqalədə bucür hesablamaların əsasında əldə edilən dəyərlərə görə necə LOOKUP veriləbiləcəyinə baxacayıq. Nümunə olaraq aşağıdakı cədvələ nəzər yetirək: Nümunədə hər hansı …

Array Formulalar
Şərtə görə MAX və MIN dəyərlərin tapılması – Array ilə (+Video)

Bir əvvəlki məqaləmizdə OFFSET ilə şərtə əsasən MAX və MIN rəqəmlərin tapılmasını gördük. İndi isə eyni nəticəyə Array metodu ilə gələcəyik. Array istifadəsinin OFFSET-ə nəzərən üstünlükləri: OFFSET funksiyasında şərtlərin olduğu sütun ardıcıl olmalıydı. Ancaq array istifadəsində buna ehtiyac yoxdur Şərtlərimizin sayı 2 və daha çox olarsa OFFSET ilə bunu həll …

COUNTIF
Şərtə görə MAX və MIN dəyərlərin tapılması – OFFSET ilə (+Video)

Düşünün ki, şəkildəki kimi “Bolgələr və Şəhərlər” üzrə satış rəqəmləriniz var və siz hər bir regionda ən az (MIN) və ən çox (MAX) satış rəqəmlərini əldə etmək istəyirsiniz. Biz istəyirik ki, şəkildəki cədvələ əsasən əgər “Bakı Abşeron Bölgəsi” seçərsəm bizə ən az satış olan 600 (1-ci ay üçün) və ən …