• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

"içeren", "ile başlayan", "ile biten" makro kodu

Katılım
19 Haziran 2007
Mesajlar
87
Excel Vers. ve Dili
Excel 2010 TR
Excel de "içeren", "ile başlayan", "ile biten" vb. durumlarda makroda hangi kodu kullanıyoruz acaba?..

Örnek
A1 sütununda "2013 Gelecek vs vs vs vs"
A2 sütununda "vs vs vs vs 2013 Gelecek"

yazıyor. Ben o seride "2013 Gelecek" kelimesini içeren satırları listelemek istiyorum. Nasıl yaparız.
 
Merhaba,

Bu şekilde deneyin. Listelemeyi B sütununda yapar.

Kod:
Sub Bul_Aktar()
 
    Dim c As Range, sat As Long, Adr As Variant
 
    Application.ScreenUpdating = False
    Range("B:B").ClearContents
 
    sat = 1
    With Range("A:A")
      Set c = .Find("2013 Gelecek")
        If Not c Is Nothing Then
          Adr = c.Address
            Do
                Cells(sat, "B") = Cells(c.Row, "A")
                sat = sat + 1
              Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Adr
        End If
    End With
 
    Application.ScreenUpdating = True
 
 End Sub

.
 
Çok teşekkürler fakat tam istediğimi bulamadım.
Aşağıdaki kodu kullanacağım ancak N sütununda "2013 Ankara" kelimesini içerenkayıtları bulup başka bir sayfaya kopyala demek istiyorum. Sadece "2013 Ankara" yazarsa hücre içinde buluyor ancak hücrelerde "2013 Ankara AAA" veya "BBB 2013 Ankara Tom" şeklinde yazabiliyor. Bu hücreleri bulamıyor. Ne yapmak lazım?..

Sub reg()
Dim s1 As Worksheet, s2 As Worksheet
Dim bul As range, satır As Long
Set s1 = Sheets("Projeler")
Set s2 = Sheets("Reg")
Application.ScreenUpdating = False
satır = 3
For Each bul In s1.range("N4:N" & s1.range("N2013").End(3).Row)
If bul.Value = "2013 ANKARA" Then
satır = satır + 1
bul.EntireRow.Copy
s2.Select
Cells(satır, 1).PasteSpecial
End If
Next bul
If [c4].Select Then
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Islem Tamamlandı! :)" & vbLf, _
vbInformation, "Mesaj :"
Else
MsgBox "Islem Yapılmadı! :(" & vbLf, _
vbCritical, "Mesaj :"
End If
End Sub
 
Sorunuza göre size uygun kodu yazmıştım.
 
Ömer hocam teşekkür ederim. O alanı başka bir fonksiyon için değerlendirdim.
Koddaki hatayı yeni farkettim.

If bul.Value = "2013 ANKARA" Then

yerine

If bul.Value Like "*2013 ANKARA*" Then

kullandığımda "2013 Ankara" kelimesini içeren tüm kayıtlar listeleniyor.

Tekrar teşekkürler.
 
Rica ederim.

Find komutu For Each döngüsüne göre çok daha hızlı çalışır. Bu yüzden find üzerinde durmuştum.

.
 
Ömer hocam,

Mevcut koduma uygulayacak olursak; find lı versiyonunu nasıl düzenleriz. Dediğiniz gibi hız farkı önem arzediyor.
 
Bu şekilde olabilir. Hata alırsanız örnek dosya eklemenizi rica ederim. Bu şekilde tahmini yazdım.

Kod:
Sub reg()
 
    Dim S1 As Worksheet, S2 As Worksheet
    Dim c As Range, sat As Long, Adr As Variant
 
    Set S1 = Sheets("Projeler")
    Set S2 = Sheets("Reg")
 
    Application.ScreenUpdating = False
    S2.Rows("3:" & Rows.Count).ClearContents
 
    sat = 3
    With S1.Range("N4:N" & Rows.Count)
        Set c = .Find("2013 ANKARA")
        If Not c Is Nothing Then
          Adr = c.Address
            Do
                S1.Rows(c.Row).Copy S2.Cells(sat, "A")
                sat = sat + 1
              Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Adr
        End If
    End With
    
    Application.ScreenUpdating = True
        
End Sub

.
 
alternatif olarak, özellikle hacimli tablolardan veri aktarırken sıklıkla kullandığım, filtreleme yöntemini ekleyeyim.

Kod:
Sub kfs()
    With Sheets("Projeler").Range("N1").CurrentRegion
        .AutoFilter Field:=14, Criteria1:="=*2013 Ankara*"
        'tablonun A sütunundan başladığı varsayılarak N sütunu = 14
        With .Parent.AutoFilter.Range
            .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).Copy Sheets("Reg").Range("A3")
        End With
        .Parent.AutoFilterMode = False
    End With
End Sub
 
Ömer hocam,

Teşekkür ederim. Çalıştı. Gerçekten daha hızlı.
Mancubus önerin için ayrıca teşekkürler. O kodu da test edeceğim.
 
Ömer hocam tek birşey soracağım.

Set c = .Find("*2013 GEBZE*") kısmında "Like" kodunu nasıl kullanabilirim?..
 
Like koduna gerek yok. * simgelerini de silebilirsiniz.

Set c = .Find("2013 GEBZE")

Bu haliyle Like kodunun yaptığı işlemi zaten yapmaktadır.

.
 
Tekrar selam,

Set c = .Find("2013 GEBZE")

komutunda "2013 ANKARA" ve "2013 GEBZE" dışındaki kayıtları gösteri nasıl verebiliriz?...
 
Find komutu aranan değeri yada değerleri bulur. Birden fazla değer aratabilirsiniz fakat ölçütün dışındakileri ara diyemiyorsunuz.

Dışındakileri bulmak için farklı kod metodu kullanılmalıdır.
 
Geri
Üst