Sağdan - Soldan ve Mbul VBA Kodu

Katılım
8 Aralık 2009
Mesajlar
44
Excel Vers. ve Dili
excel 2016
Merhaba arkadaşlar,

=SAĞDAN(SOLDAN(A1;MBUL("_";A1;1)-1);MBUL(" ";A1;1))

A1 hücresinde "2021 01 30 12345_ankarada hava durumu" şeklinde bir metin var. Metindeki "12345" olan kısmını, yani tarihten sonraki alt tireye kadar olan sayı kısmını yukarıdaki formül ile başka bir hücreye yazdırabiliyorum.

Bu formülü veya bu mantıkla çalışacak VBA koduna ihtiyacım var.
Yardımcı olacak arkadaşlara şimdiden teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,329
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Ben bu tarz işlemlerde MAKRO KAYDET yöntemini kullanıyorum. Excel bu aşamada formülde ki başvuru adreslerini R1C1 stilinde yazıyor. Sadece bunları hücre adresi şeklinde düzenleyerek daha anlamlı hale getiriyorum. Böylece okuması daha kolay oluyor.

Ham makro kaydet ile oluşan kod;

C++:
Sub Makro1()
'
' Makro1 Makro
'

'
    Range("C1").Select
    ActiveCell.FormulaR1C1 = _
        "=RIGHT(LEFT(RC[-2],SEARCH(""_"",RC[-2],1)-1),SEARCH("" "",RC[-2],1))"
    Range("C2").Select
End Sub

Benim yaptığım düzenleme;

Gereksiz satırları temizledikten sonra R1C1 stilindeki hücre adreslerini revize etttim. Ayrıca sadece sonucu göstersin diye EVALUATE özelliğini ekledim.

C++:
Sub Makro1()
    Range("C1") = Evaluate("RIGHT(LEFT(A1,SEARCH(""_"",A1,1)-1),SEARCH("" "",A1,1))")
End Sub
Aslında VBA tarafında farklı çözümlerde uygulanabilir. Eğer A1 hücresinde ki veriniz standart biçimde yazılıyorsa "Split" komutu da işinize yarayabilir. Forumda bununla ilgili bolca örnek var. Arama yaparsanız ulaşabilirsiniz.
 
Katılım
8 Aralık 2009
Mesajlar
44
Excel Vers. ve Dili
excel 2016
Teşekkür ederim Koray bey Split komutunu araştırayım, olmasa yukarıdakini uygularım.
 
Katılım
20 Şubat 2012
Mesajlar
242
Excel Vers. ve Dili
office2007 Türkçe
Denemek isterseniz alternatif

Kod:
Sub CumleAyir()
    
    Dim k As Long
    
    On Error Resume Next
    
    Application.ScreenUpdating = False
    
    For k = 1 To Cells(Rows.Count, "a").End(3).Row
        Cells(k, "B") = Split(Cells(k, "A"), "_")(0)
         Cells(k, "C") = Split(Cells(k, "A"), "_")(1)
    Next k
    
    Application.ScreenUpdating = True
    
    MsgBox "İşleminiz Tamam"
    
End Sub
 
Katılım
8 Aralık 2009
Mesajlar
44
Excel Vers. ve Dili
excel 2016
Teşekkürler, halloldu
 
Üst