• DİKKAT

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

find fonksiyonu kullanımı

Katılım
22 Eylül 2006
Mesajlar
883
Excel Vers. ve Dili
Office Excel®2007®TR
Merhaba Arkadaşlar ;
Aşağıdaki kod ile İSMAİL ATEŞ İ B3:B500 de aratıp hemen bir sağındaki değeri c1 hücresine aktarıyorum.Acaba A1 hücresindeki değeri nasıl aratabilirim ?Selection.Find(What:=Range("A1").value yazdım olmadı.
Kod:
Sub arama()
Range("B3:B500").Select
Selection.Find(What:="İSMAİL ATEŞ", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Select
ActiveCell.Offset(0, 1).Select
Selection.Copy
Range("C1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
 
merhaba
What:=Range("A1").Text veya
What:=[a1] şeklinde deneyiniz
 
Teşekkürler.What:=Range("A1").Text şeklinde yazmak sorunu çözdü.
 
Walla çok güzel bilgiler dönüyor bu formda ama en üzücü tarafı herkesin bişeyler bilerek buraya gelmesi oluyor ...Arkadaşlar Find komutunun işlevi hakkında arama yapıyorum kullanımı diye başlık buluyorum hah şimdi find komutunun işlevi hakkında bilgi sahibi olacağım diyorum bakıyorum ki yazan arkadaş zaten bilerek gelmiş kod bloğu içerisinde find'ın kullanımından bahsediyor...Gerçekten benim gibi hiç bilmeyen arkadaşlar veya öğrenmek için çaba içersinde olan arkadaşlar için sadece ekrandaki yazılı kod bloklarına bakarak karamsarlığa kapılmaktan başka bişey kalmıyor...Lütfen Kodların içeriklerini basitçe de olsa değinerek bir anlatım tarzı geliştirsek yeni başlayanlar için kavramak çok daha kolay olacak
 
sn sefer_50.
forumun adından da anlaşılacağı üzere soru sorduğumuz bir forum.
burada eğitici materyal tanım gereği sık bulunmaz.

önerim ilk olarak VBE'de F1'e basarak yardıma girmeniz. konu başlığı yazarak açıklamaları takip etmeniz. VBA kaynaklar genellikle ingilizcedir. ama hiç bilmeseniz bile macro kullanımına aşina iseniz bir şeyler çıkarırsınız. çoğunlukla bir örnek mutlaka vardır.

bakın ben biraz önce aynısını yaptım. aşağıdaki excel vba help'in örneğini forumdaki bir çok soruya cevap olarak bulursunuz.

aşağıdaki kod a1:a500 aralığına bakar, hücrede 2 rakamı varsa bunun yerine 5 yazar.

Kod:
With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

kullanım:
Syntax : expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

"expression" ve "what" zorunlu, diğerleri opsiyoneldir.

expression: Range nesnesini temsil eden bir değişkendir. (örnekte: Worksheets(1).Range("a1:a500"))

what: aranacak değerdir. (örnekte 2)
after: aramaya başlanacak hücreyi gösterir.
LookIn: neye bakacak. değerler (xlValues), formüller(xlFormulas), vs
LookAt: nasıl bakacak. arananın tamamına(xlWhole), kısmen(xlPart). örneğin kedi kelimesini arıyorsak xlWhole sadece kedi olanları getirirken, xlPart kedicik olanları da getirir.
SearchOrder: arama sırası xlByRow satır sırasında, xlByColumns sütun sırasında arar.
SearchDirection: aramaya başlanan hücreden itibaren arama yönü. xlNext bir sanraki, xlPrevious bir önceki.
MatchCase: büyük harf küçük harf önemli ise true, değilse false.
(son iki argüman çok gerekli değil pas geçtim.)
 
Çok teşekkür ederim mancubus arkadaşım...Gerçekten böyle anlatıldığı zaman insanın öğrenme isteği tazeleniyor..Verdiğiniz bilgiler ışığında denemeler yaparak kodun iyice kafamda pekişmesini sağlamaya çalışacağım...Bir de bu find komutu FileSearch komutunun yerini almış sanırım..Yanılıyormuyum...Şimdi office 2003'ü kurup Filesearch komutunu orada çalıştırabilmeyi başardım..Ama dediğim gibi office 2007' de hata veriyor...Ayrıca bugün şanslıyım soruna çok kısa sürede yanıt aldım...Tekrar tekrar teşekkürlerimi sunuyorum.
 
rica

merhaba,

benimde benzer bir hususta yardıma ihtiyacım olacak. formül ile beceremedim. şöyle ki; binlerce satır, hücrelerin bazılarının içindeki değerlerin içindeki sadece bir kısmı bold yapmak istiyorum. mesela; atanurkurt, nuratanur, atanur kurt
bu değerler farklı hücrelerde olsun. bunlardan sadece ata kelimesini bold nasıl yapabilirim?

teşekkür ederim
 
ben bu formulü değiştirerrek yapmaya çalıştım ama yapamadım SAYFA 1 deki e1,e2,e3,e6 ve e 10 daki bilgileri sayfa 2 de bulmasını ve yerine sayfa 1 deki e1:e14 aralığındaki bilgileri yapıştırmasını istiyorum ve mancubus saolasın az çok sayende bişeyler öğrendim ama yapamadım bunu nasıl yaparım arkadaşlar
 
Örnek dosya üzerinde yapmak istediğiniz işlemi açıklayabilir misiniz?
 
Örnek dosya üzerinde yapmak istediğiniz işlemi açıklayabilir misiniz?
örnek dosya derken hocam anlayamadım kendi dosyamı sayfalarımı soruyorsanız?
"SATIŞ KAYDI" sayfasındaki "e1,e2,e3,e6 ve e10" hücrelerindeki değerleri "tüm satışlar" sayfasında arayıp bulmasını istiyorum ama arayacağı değerler satırlarda yazılı satırdan arayacak bulacak ve bu bilgilerin olduğu satırın yerine "SATIŞ KAYDI" sayfasındaki "e1:e14" ü yapıştıracak
 
İşlemin doğruluğunu kontrol edebilmemiz için sizdeki çalışma kitabını (örnek dosya) foruma eklemenizi talep etmiştim. Paylaşım sitelerine yükleyip link verebilirsiniz.
 
Deneyiniz.

Kod:
Sub BUL_AKTAR()
    Dim S1 As Worksheet, S2 As Worksheet, BUL As Range, ADRES As String
    
    Set S1 = Sheets("SATIŞ KAYDI")
    Set S2 = Sheets("tüm satışlar")
    
    Set BUL = S2.Range("A:A").Find(S1.Range("E1"), , , xlWhole)
    If Not BUL Is Nothing Then
        ADRES = BUL.Address
        Do
            If S1.Range("E2") = BUL.Offset(0, 1) Then
                If S1.Range("E3") = BUL.Offset(0, 2) Then
                    If S1.Range("E6") = BUL.Offset(0, 5) Then
                        If S1.Range("E10") = BUL.Offset(0, 9) Then
                            S1.Range("E1:E14").Copy
                            S2.Range("A" & BUL.Row).PasteSpecial xlPasteValues, , , True
                            Application.CutCopyMode = False
                            MsgBox "Veriler aktarılmıştır.", vbInformation
                            Exit Do
                        End If
                    End If
                End If
            End If
            Set BUL = S2.Range("A:A").FindNext(BUL)
        Loop While Not BUL Is Nothing And BUL.Address <> ADRES
    End If
                        
    Set BUL = Nothing
    Set S1 = Nothing
    Set S2 = Nothing
End Sub
 
HOCAM ALLAH RAZI OLSUN ÇOK AMA ÇOK TEŞEKKÜRLER YALNIZ HALA MANTIĞINI ANLAYAMADIM ONA YANARIM ANLAMAK DA HEMEN KOLAY DEĞİLMİŞ BNUDA ANLADIM mesela burda find içeriğine sadece satış kaydı e1 dekini ara demişsiniz ama aşağı döngü yapmışsınız o döngüden alıyor galiba diğerlerini mantığını anlamak çok zor maalesef,birde hocam kopyala yapıştır makrosu yapıyoruz ama pc bi 5 saniye bekliyor ve sayfalar arası kopyala yapıştır yapıyorum yapıştırmak istediğimiz sayfayı açmadan kopyala yapıştır yapmak mümkün mü?mümkünse kod nasıl olacak?örnek dosya at derseniz yine atayım
 
..............kopyala yapıştır makrosu yapıyoruz ama pc bi 5 saniye bekliyor ve sayfalar arası kopyala yapıştır yapıyorum yapıştırmak istediğimiz sayfayı açmadan kopyala yapıştır yapmak mümkün mü?mümkünse kod nasıl olacak?örnek dosya at derseniz yine atayım
Merhaba.

Gerek kopyalama ve gerekse de yapıştırma işlemini sayfaları ekrana getirerek yapmak gerekmez.

Örneğin;
-- belgem açık ve önümde Sayfa1 aktif,
-- Sayfa1'de bulunan bir düğme/şekil/metin kutusu ile aşağıdaki kod'u önceden ilişkilendirdim,
-- bu nesneye fareyle tıkladığımda Sayfa2'deki A1:C5 hücre aralığı, Sayfa3'deki C8:E12 aralığına kopyalanır.
(kaynak alanda formül varsa formül olarak, değer varsa değer olarak ve varsa koşullu biçimlendirme dahil biçimiyle birlikte)
.
Kod:
[B]Sub KOPYALA()[/B]
    [COLOR="red"]Sheets("[B]Sayfa2[/B]").[A1:C5][/COLOR].Copy [COLOR="blue"]Sheets("[B]Sayfa3[/B]").[C8][/COLOR]
[B]End Sub[/B]
 
E1 hücresindeki veriniz diğer sayfada birden çok satırda geçtiğinden CTRL+F (BUL-SONRAKİNİ BUL) komutu koda çevrilmiştir.

Kod içinde geçen DO ifadesinden sonraki IF sorguları sizin E2-E3-E6-E10 hücrelerinizdeki verilerin eşleşip eşleşmediğini sorgulamaktadır. Bütün kayıtlar eşleşince kopyalama işlemini yapmaktadır.

Kısaca olayın özü budur.

Kopyalama işleminde zaman kaybı oluyorsa kodları hızlandırmak için aşağıdaki yapıyı kullanabilirsiniz.

Kod:
Sub TEST()
    Application.ScreenUpdating = False
    Hesaplama_Tipi = Application.Calculation
    Application.Calculation = xlCalculationManual
    
    'KOPYALAMA KODLARINIZ...
    'KOPYALAMA KODLARINIZ...
    'KOPYALAMA KODLARINIZ...
    
    Application.ScreenUpdating = True
    Application.Calculation = Hesaplama_Tipi
End Sub
 
korhan hocam dediğinizi uyguladım pc açması gereken sayfayı açıyor açtığını göstermiyor güzel olmuş ama zaman kaybı yine var ben dosyayı atayım kaydet makrosuna bakın ben size makro kodunu da yazıyım yinede buraya ,bir tane daha var o daha karışık ama şekil olarak aynı sizin bunu yapmanız yeterli olur sanırım ben bu vereceğiniz kodlara göre ona uygulama yaparım yapabilirim diye ümid ediyorum
Kod:
Sub kaydet()
'
' kaydet Makro
'

'
    Range("C2:C10").Select
    Selection.Copy
    Sheets("İSTİFLER").Select
    Sheets("depo genel kayıt").Visible = True
    Sheets("İSTİFLER").Select
    ActiveWindow.SelectedSheets.Visible = False
    Application.Goto Reference:="R100000C1"
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=True
    Application.CutCopyMode = False
    Sheets("depo genel kayıt").Select
    Sheets("İSTİFLER").Visible = True
    Sheets("depo genel kayıt").Select
    ActiveWindow.SelectedSheets.Visible = False
    Selection.Copy
    Application.Goto Reference:="R1000C1"
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=True
    ActiveWindow.SmallScroll Down:=-15
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("İSTİFLER").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("İSTİFLER").AutoFilter.Sort.SortFields.Add Key:= _
        Range("F15"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("İSTİFLER").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("C2:C5,C7,C9:C10").Select
    Range("C9").Activate
    Selection.ClearContents
    Range("C2").Select
End Sub
 
Merhaba.

Gerek kopyalama ve gerekse de yapıştırma işlemini sayfaları ekrana getirerek yapmak gerekmez.

Örneğin;
-- belgem açık ve önümde Sayfa1 aktif,
-- Sayfa1'de bulunan bir düğme/şekil/metin kutusu ile aşağıdaki kod'u önceden ilişkilendirdim,
-- bu nesneye fareyle tıkladığımda Sayfa2'deki A1:C5 hücre aralığı, Sayfa3'deki C8:E12 aralığına kopyalanır.
(kaynak alanda formül varsa formül olarak, değer varsa değer olarak ve varsa koşullu biçimlendirme dahil biçimiyle birlikte)
.
Kod:
[B]Sub KOPYALA()[/B]
    [COLOR="red"]Sheets("[B]Sayfa2[/B]").[A1:C5][/COLOR].Copy [COLOR="blue"]Sheets("[B]Sayfa3[/B]").[C8][/COLOR]
[B]End Sub[/B]
ömer baran teşekkür ederim hocam ama benim kopyaladığım hücreleri ters çevir yapıyorum özel yapıştır seçeneğini kulanıyorum ve birde en aşığadan yukarıya ilk boş olan satıra kopyalatıyorum aşağıda gönderdiğim kodda mevcut ama yinede çok teşekkür edrim forumda aradım kimse siz gibi bu durumdan bahsetmemiş genelde yapanlar makro da olduğu gibi yapmış oda pc yi kasıyor o yüzden sayfaları açmadan yapmasını istedim
 
http://www.dosyaupload.com/ht1K
hocam bu makroyu ben 12 sayfada kullanmak istiyorum yani "İSTİFLER" sayfasından "İSTİFLER(2),İSTİFLER(3),İSTİFLER(4),İSTİFLER(5)...şeklinde 12 ye kadar var ama diğer sayfa sabit "depo genel kayıt" sayfasına yapıştırıacak ve kaydet makrosunu bunların hepsinde kullanacağım hepsine makroyu kopyalamam gerekiyor ve tek tek isimlerini değiştirmem gerekiyor başka çözümü varmı bunun aynı makroyu başka sayfa ismi olursa kullanmam mümkün mü?makroda mümkün değil ama kodda bilmiyorum?dosyayı yükledim bakarsanız daha iyi anlarsınız
 
Geri
Üst