Metnin İçinden Rakamı Alma (Parçaal / Soldan / Sağdan)

Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Merhaba arkadaşlar,

ekteki dosyada örneğim mevcut, normalde 200 - 1000 arası satırda çalışıyorum.
istediğim: A sütununda bulunan verinin içinden fiyatı çekip almak. düne kadar veriler "%0 0,00 TL 64,90 TL" şeklinde idi ama artık "%0 64,90 TL" veri geliyor yani birinci TL ibaresi kalkmış hücreler de var ve fonksiyon formülüm işe yaramıyor. C sütununda da kendi fonksiyon formülüm var.

burada daha önce hem makro hem fonksiyon düzeyinde çok sorunumu çözdüm, bunun da çözülmesi konusunda yardımlarınızı esirgemeyeceğinizi biliyorum. şimdiden teşekkür ediyorum herkese.
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,356
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Ekli dosyanızı inceleyin.

Kod:
[SIZE=2]Private reg As New RegExp

Function SayiAl(Hucre As Range, KacinciSayi As Byte) As Double
    reg.Global = True
    reg.MultiLine = True
    reg.Pattern = "(?:\d*\.)?(?:\d*\.)?\d+(,\d{0,})?"
    
    SayiAl = reg.Execute(Hucre).Item(KacinciSayi - 1)
End Function[/SIZE]
 

Ekli dosyalar

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.

Konuyu FONKSİYONLAR bölümüne açtığınız için formül önerisinde bulunmak istedim.

Aşağıdaki formülü, 2'nci satırda bir hücreye uygulayın ve aşağı doğru kopyalayın.
İki tip veri için de sonuç alabilmeniz lazım.

Başta ve sondaki mavi kısım varken SAYI, yokken ..... TL şeklinde METİN sonuç alırsınız.
.
Kod:
=[COLOR="Blue"]0+YERİNEKOY([/COLOR][COLOR="red"]KIRP[/COLOR]([COLOR="red"]TEMİZ[/COLOR]([COLOR="red"]PARÇAAL[/COLOR](A2;[COLOR="red"]BUL[/COLOR]([COLOR="red"]EĞER[/COLOR]([COLOR="red"]UZUNLUK[/COLOR]([COLOR="red"]KIRP[/COLOR]([COLOR="red"]TEMİZ[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR](A2;[COLOR="red"]DAMGA[/COLOR](10);" ");"TL";" TL"))))-[COLOR="red"]UZUNLUK[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR]([COLOR="red"]KIRP[/COLOR]([COLOR="red"]TEMİZ[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR](A2;[COLOR="Red"]DAMGA[/COLOR](10);" ");"TL";" TL")));"TL";""))=2;" ";"TL");A2;1)+2;255)))[COLOR="Blue"];" TL";"")[/COLOR]
 
Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Ekli dosyanızı inceleyin.

Kod:
[SIZE=2]Private reg As New RegExp

Function SayiAl(Hucre As Range, KacinciSayi As Byte) As Double
    reg.Global = True
    reg.MultiLine = True
    reg.Pattern = "(?:\d*\.)?(?:\d*\.)?\d+(,\d{0,})?"
    
    SayiAl = reg.Execute(Hucre).Item(KacinciSayi - 1)
End Function[/SIZE]
Zeki Bey yardım ve desteğiniz için çok teşekkür ediyorum, bu makroyu biraz geliştirmemiz mümkün müdür? mesela siz 1. sayı, 2. sayı şeklinde gitmişsiniz ya, bana her zaman en sondaki sayı lazım.

mesela;

a2 hücresinden 64.90,
a4 hücresinden 49.25,
a6 hücresinden 2,599.00

sadece bunu sağlamak mümkün müdür?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,356
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Elbette mümkün. Aşağıdaki fonksiyonu yapıştırp değiştirin.

Formülün içindeki "1" silin.

Kod:
Private reg As New RegExp

Function SayiAl(Hucre As Range) As Double
    reg.Global = True
    reg.MultiLine = True
    reg.Pattern = "(?:\d*\.)?(?:\d*\.)?\d+(?:,\d{0,})?"
    
    Set col = reg.Execute(Hucre)
    SayiAl = col.Item(col.Count - 1)
End Function
 
Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Merhaba.

Konuyu FONKSİYONLAR bölümüne açtığınız için formül önerisinde bulunmak istedim.

Aşağıdaki formülü, 2'nci satırda bir hücreye uygulayın ve aşağı doğru kopyalayın.
İki tip veri için de sonuç alabilmeniz lazım.

Başta ve sondaki mavi kısım varken SAYI, yokken ..... TL şeklinde METİN sonuç alırsınız.
.
Kod:
=[COLOR="Blue"]0+YERİNEKOY([/COLOR][COLOR="red"]KIRP[/COLOR]([COLOR="red"]TEMİZ[/COLOR]([COLOR="red"]PARÇAAL[/COLOR](A2;[COLOR="red"]BUL[/COLOR]([COLOR="red"]EĞER[/COLOR]([COLOR="red"]UZUNLUK[/COLOR]([COLOR="red"]KIRP[/COLOR]([COLOR="red"]TEMİZ[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR](A2;[COLOR="red"]DAMGA[/COLOR](10);" ");"TL";" TL"))))-[COLOR="red"]UZUNLUK[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR]([COLOR="red"]KIRP[/COLOR]([COLOR="red"]TEMİZ[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR]([COLOR="red"]YERİNEKOY[/COLOR](A2;[COLOR="Red"]DAMGA[/COLOR](10);" ");"TL";" TL")));"TL";""))=2;" ";"TL");A2;1)+2;255)))[COLOR="Blue"];" TL";"")[/COLOR]


Ömer Bey cevabınız için çok teşekkür ediyorum, aslında makro istemek aklıma gelmedi, lütfen kusura bakmayın.

formülünüzü denedim, en baştaki "0+" varken #DEĞER hatası veriyor, onu kaldırınca da 64,90 (virgüllü) sonuç veriyor,en başa yine bir "yerinekoy" formülü ile sonuça ulaşıyorum ama sayıya dönmüyor, manuel sayıya çevir demem gerekiyor.

ekte durumu biraz anlatmaya çalıştım ama inşallah daha da karıştırmamışımdır.
 

Ekli dosyalar

Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Elbette mümkün. Aşağıdaki fonksiyonu yapıştırp değiştirin.

Formülün içindeki "1" silin.

Kod:
Private reg As New RegExp

Function SayiAl(Hucre As Range) As Double
    reg.Global = True
    reg.MultiLine = True
    reg.Pattern = "(?:\d*\.)?(?:\d*\.)?\d+(?:,\d{0,})?"
    
    Set col = reg.Execute(Hucre)
    SayiAl = col.Item(col.Count - 1)
End Function


Zeki Bey son bir değişiklik affınıza sığınarak;

benim ana çalışma kitabımda veri aldığım sayfa başka bir sayfa, bu sebeple midir bilmiyorum hata veriyor kod. kontrol edebilir misiniz?


Düzeltme: hata verdiğinde "reg As New RegExp" bu kısım seçili oluyor.
 
Son düzenleme:

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Bu kadar açıklama yerine keşke bir sütuna olması gereken nihai sonucu elle yazsaydınız.

Sanırım gönderdiğim formülün sonundaki mavi kısmı görmemişsiniz.

Yeni eklediğiniz örnek belgeye göre mavi kısım varken de yokken de formül hata vermiyor.

Sonucun virgüllü olması kısmını hiç anlamadım, siz 49,90 yerine 49.90 mı istiyorsunuz?

O zaman ya excel ayarlarından binlik/ondalık ayraçlarına ilişkin ayarı değiştireceksiniz ya da SAYI yerine METİN sonucu elde etmek istiyorsunuz gibi geliyor bana.

Dosyayı ekledim.
.
 

Ekli dosyalar

Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Ömer Bey,

B sütununa olması gereken sonucu elle yazmıştım ama sanırım görememişsiniz.

başta ve sondaki mavi kısımları gördüm, onları silince 49,90 TL sonucuna ulaşıyorum.

sanırım problem binlik/ondalık ayraçlarda. ben kullandığımız muhasebe programı sebebiyle sistem ayraçlarını kullanmıyorum, binlikte virgülü, ondalıkta noktayı kullanıyorum. belki de problemin ana sebebi budur.

evet ben 49.90 olsun istiyorum.

düzeltme: evet problem benim binlik/ondalık ayraçları kullanmamam imiş, şu anda formülünüz çalışıyor. çok teşekkür ediyorum.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,356
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Hızlı çalışması için referans eklemiştim. Fonksiyonu aşağıdaki gibi de kullanabilirsiniz.

"reg As New RegExp" kısmını silin.

Kod:
Function SayiAl(Hucre As Range) As Double
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True
    reg.MultiLine = True
    reg.Pattern = "(?:\d*\.)?(?:\d*\.)?\d+(?:,\d{0,})?"
    
    Set col = reg.Execute(Hucre)
    SayiAl = col.Item(col.Count - 1)
End Function
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Sayfayı yenileyerek bundan bir önceki cevabıma tekrar bakın isterseniz, belge ekledim.
 
Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Hızlı çalışması için referans eklemiştim. Fonksiyonu aşağıdaki gibi de kullanabilirsiniz.

"reg As New RegExp" kısmını silin.

Kod:
Function SayiAl(Hucre As Range) As Double
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True
    reg.MultiLine = True
    reg.Pattern = "(?:\d*\.)?(?:\d*\.)?\d+(?:,\d{0,})?"
    
    Set col = reg.Execute(Hucre)
    SayiAl = col.Item(col.Count - 1)
End Function
teşekkürler Zeki Bey, hakkınızı helal edin, yordum sizi.
 
Katılım
30 Mart 2011
Mesajlar
61
Excel Vers. ve Dili
office 365 türkçe
Altın Üyelik Bitiş Tarihi
20.06.2019
Sayfayı yenileyerek bundan bir önceki cevabıma tekrar bakın isterseniz, belge ekledim.
Ömer Bey çok teşekkür ediyorum, gördüm dosyanızı, sorun benim binlik/ondalık ayraçları ters kullanmamdan kaynaklanıyor. benim için güzel bir alternatif oldu çözümünüz.

hakkınızı helal edin lütfen vaktinizi aldım.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Ömer Bey çok teşekkür ediyorum, gördüm dosyanızı, sorun benim binlik/ondalık ayraçları ters kullanmamdan kaynaklanıyor. benim için güzel bir alternatif oldu çözümünüz.

hakkınızı helal edin lütfen vaktinizi aldım.
Kolay gelsin.
.
 
Üst