Excel Forum
ALTIN ÜYELİK Hakkında Bilgi


Geri Git   Excel Forum > EXCEL-Soruları > Makro-VBA
Atatürk
Şifremi Unuttum

DUYURU SİSTEMİ / REKLAM PANOSU

Makro-VBA Makro veya VBA ile ilgili sorularınızı buraya gönderebilirsiniz.
Dosya ekleyebilirsiniz

Özel Arama


Yanıtla
 
Paylaş Konu Araçları Görünüm Modları
Eski 14-04-2018, 12:38   #1
bosshakan
 
Giriş: 29/12/2007
Mesaj: 12
Excel Vers. ve Dili:
2007 Türkçe
Varsayılan RegExp Tüm Eşleşmeleri Çeksin İstiyorum

Merhaba arkadaşlar,

Biraz araştırma yaparak bir RegExp modülü oluşturdum belirtilen iki metin arasında ki metni seçip sütuna yazıyor, ama yalnızca ilk eşleşmeyi yazıyor. Bunu o sütunda ki tüm eşleşmeleri yazacak hale getirmek istiyorum.

Kullandığım kod şu;

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Function getYazar(addr As String)

Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")


RE.Pattern = "\[29617::(.*?)\]"
RE.Global = True
RE.IgnoreCase = True


Set allMatches = RE.Execute(addr)

If (allMatches.Count <> 0) Then
    result = allMatches.Item(0).submatches.Item(0)
End If

getYazar = result
End Function
Yardımcı olursanız sevinirim.
bosshakan Çevrimdışı   Alıntı Yaparak Cevapla
Eski 14-04-2018, 13:26   #2
yanginci34
Altın Üye
 
Giriş: 06/07/2010
Şehir: istanbul
Mesaj: 673
Excel Vers. ve Dili:
excel2013
Varsayılan

Merhaba gerçeğine yakın örnek dosya http://dosya.co/ adresine yüklerseniz daha iyi yardımcı olunur.
yanginci34 Çevrimdışı   Alıntı Yaparak Cevapla
Eski 14-04-2018, 13:34   #3
bosshakan
 
Giriş: 29/12/2007
Mesaj: 12
Excel Vers. ve Dili:
2007 Türkçe
Varsayılan

Merhaba, tavsiyeniz için teşekkür ederim bir örnek oluşturup belirttiğiniz siteye yükledim: http://dosya.co/gsjhf6n7d502/ornekyazarcek.xlsm.html
bosshakan Çevrimdışı   Alıntı Yaparak Cevapla
Eski 14-04-2018, 15:47   #4
Zeki Gürsoy
Uzman
 
Zeki Gürsoy kullanıcısının avatarı
 
Giriş: 30/12/2005
Şehir: Sakarya-Hendek
Mesaj: 3,437
Excel Vers. ve Dili:
Office 2016 (x64) - Türkçe
Varsayılan

Merhaba, aşağıdaki deseni kullanın. Function şekli isteğinize kalmış.

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
\[\d{5,}::(.+?)\]
__________________

gursoyzeki@gmail.com




Zeki Gürsoy Çevrimiçi   Alıntı Yaparak Cevapla
Eski 14-04-2018, 16:07   #5
alicimri
 
Giriş: 12/12/2015
Mesaj: 479
Excel Vers. ve Dili:
Ofis 2003
Varsayılan

Aşağıdaki fonsiyonu deneyin.
Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Function getYazar(addr As String)
addr = Replace(Trim(Replace(addr, ",", "    ")), "    ", ",")
k = Split(addr, ",")
For i = 0 To UBound(k)
If Left(k(i), 6) = "[29617" Then
y = y & Split(k(i), "::")(1)
End If
Next
y = Replace(y, "]", ", ")
getYazar = Mid(y, 1, Len(y) - 2)
End Function

Bu mesaj en son " 15-04-2018 " tarihinde saat 17:20 itibariyle alicimri tarafından düzenlenmiştir.... Neden: Baştaki ve sondaki virgüllerden kurtulmanın daha kolay varmış.
alicimri Çevrimdışı   Alıntı Yaparak Cevapla
Eski 15-04-2018, 16:08   #6
bosshakan
 
Giriş: 29/12/2007
Mesaj: 12
Excel Vers. ve Dili:
2007 Türkçe
Varsayılan

Alıntı:
Zeki Gürsoy tarafından gönderildi Mesajı Görüntüle
Merhaba, aşağıdaki deseni kullanın. Function şekli isteğinize kalmış.

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
\[\d{5,}::(.+?)\]
Kullandığım pattern'de sorun yok aslında istediğim veriyi çekiyor yani 29617 ID özelliğine sahip veriyi çekiyor. 29618'ler gelmesin istiyorum o yüzden sorun burada değil de o sütunda ki tüm 29617'ye sahip verilerin yazılması.
bosshakan Çevrimdışı   Alıntı Yaparak Cevapla
Eski 15-04-2018, 16:13   #7
bosshakan
 
Giriş: 29/12/2007
Mesaj: 12
Excel Vers. ve Dili:
2007 Türkçe
Varsayılan

Alıntı:
alicimri tarafından gönderildi Mesajı Görüntüle
Aşağıdaki fonsiyonu deneyin.
Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Function getYazar(addr As String)
addr = Replace(Trim(Replace(addr, ",", "    ")), "    ", ",")
k = Split(addr, ",")
For i = 0 To UBound(k) - 1
y = y & Split(k(i), "::")(1)
Next
y = Replace(y, "]", ", ")
getYazar = Mid(y, 1, Len(y) - 2)
End Function
Bu şekilde birden fazla veriyi çekiyor ama pattern bana lazım olan şekilde değil, son veriyi çekmiyor arada 26918 ID'ye sahip veri varsa onu da çekiyor!

Net amaç şu sadece 26917 ile işaretli verileri yazmalı virgül yada herhangi bir ayraç ile ayırarak.
bosshakan Çevrimdışı   Alıntı Yaparak Cevapla
Eski 15-04-2018, 17:21   #8
alicimri
 
Giriş: 12/12/2015
Mesaj: 479
Excel Vers. ve Dili:
Ofis 2003
Varsayılan

#5 nolu mesajdaki kodu değiştirdim.
alicimri Çevrimdışı   Alıntı Yaparak Cevapla
Eski 15-04-2018, 17:56   #9
Haluk
Özel Üye
 
Giriş: 07/07/2004
Şehir: Türkiye
Mesaj: 5,540
Excel Vers. ve Dili:
Office 2010 - İngilizce
Varsayılan

Alıntı:
bosshakan tarafından gönderildi Mesajı Görüntüle
.......sorun burada değil de o sütunda ki tüm 29617'ye sahip verilerin yazılması.

O zaman, kullandığınız fonksiyonda yapılan aşağıdaki ufak değişiklik işinizi görecektir....

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Function getYazar(addr As String)
    Dim allMatches As Object
    Dim RE As Object
    Set RE = CreateObject("vbscript.regexp")
    
    RE.Pattern = "\[29617::(.*?)\]"
    RE.Global = True
    RE.IgnoreCase = True
    
    Set allMatches = RE.Execute(addr)
    
    If allMatches.Count >= 1 Then
        For i = 0 To allMatches.Count - 1
            getYazar = getYazar & allMatches.Item(i).submatches.Item(0) & " - "
        Next i
        getYazar = Mid(getYazar, 1, Len(getYazar) - 3)
    Else
        getYazar = ""
    End If
End Function
.
__________________
Kod anlatılmaz,yazılır ! 🇹🇷

(Özel sorularınız için sa4truss@gmail.com)

Bu mesaj en son " 15-04-2018 " tarihinde saat 18:03 itibariyle Haluk tarafından düzenlenmiştir....
Haluk Çevrimdışı   Alıntı Yaparak Cevapla
Eski 16-04-2018, 10:16   #10
bosshakan
 
Giriş: 29/12/2007
Mesaj: 12
Excel Vers. ve Dili:
2007 Türkçe
Thumbs up

@alicimri ve @Haluk ustalar ikinizin de yazdığı son kodlar işe yaradı. İkinize de çok teşekkür ederim ilginiz için.
bosshakan Çevrimdışı   Alıntı Yaparak Cevapla
Yanıtla


Konu Araçları
Görünüm Modları

Gönderme Kuralları
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı


Saat 21:15


Bu forum Elit NET - www.elitnet.com.tr tarafından sunulmaktadır.

Excel Eğitimi - Mobil Uygulama - Çorlu - Çorlu Web Tasarım -- Beylikdüzü mali müşavir - Beylikdüzü mali müşavir - Lingerie - Dyeing Machine - Karton Bardak- Karton Bardak- Çorlu Dil Konuşma Terapisti- Çorlu Dil Konuşma Terapisti- Çorlu Konuşma Terapisti- Çorlu Konuşma Terapisti- Çorlu Özel Eğitim- Site Yönetimi- Pronet Tekirdağ- Çorlu Kamera- Pronet Edirne- Pronet Çorlu- Çorlu Araç Takip- Rampa- Çorlu İnternet Sitesi- Çorlu Sürücü Kursu- Şişli Avukat- Çorlu Etüt- İstanbul Botanik- Çorlu Sigorta- Kağıt Bardak- Kağıt Bardak- Çorlu Havuz- Çorlu Havuz- Çorlu Perde Yıkama- Okul Danışmanlık- ADR'li taşıma kabı imalatı- Mekanik Tesisat- Çorlu Grafik Tasarım- Çorlu Sondaj- Çorlu Etüt- Futbol Cafe- Beylikdüzü Temizlik- Çorlu Kurs- Çorlu Ders- İzmit Mimar- Hurda Bakır Kablo- Hurda Bakır Kablo- Çorlu Pronet- Çorlu Yönetim- Çorlu Apartman Yönetimi- Çorlu Marangoz- Çorlu Avukat-
Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden