Excel Formül Sorusu Sor

Bir Excel formülüne dair sorunuz varsa, bu alanı kullanarak bize iletin.

Excel Makro Sorusu Sor

Bir Excel VBA koduna dair sorunuz varsa, bu alanı kullanarak bize iletin.

Genel Excel Sorusu Sor

Excel'in ön sayfasındaki FORMÜL haricinde olan sorularınızı buradan sorabilirsiniz.
Belki kullanan vardır. Ancak henüz denemeyenlere hatırlatmak için yazıyorum.
Benim gibi Excel/VBA Öğrenen ve tüm konulara hakim olmayan arkadaşlar üst seviye makro kodlarını anlamaya çalışırken kullanmalarını tavsiye ederim.
En azından benim VBA kodlarını çözmede ve anlamada başka hiç bir yere bakmadan çözmemi sağlıyor.

Kısaca web sitesi üzerinden kullanılmasından bahsetmek istiyorum.


adresine girip üye oluyorsunuz. Üye mailinize onay e-postası geliyor. Onayladıktan sonra giriş yapıyorsunuz.

Örneğin.
Şuan @Ömer BARAN Bey'in en son açtığım konuda yazmış olduğu VBA yı çözmeye/anlamaya çalışıyorum.

VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("BK2:BK6, BN2:BN6")) Is Nothing Then Exit Sub
adr1 = Array("BK2", "BK3", "BK4", "BK5", "BK6", "BN2", "BN3", "BN4", "BN5", "BN6")
adr2 = Array("B2", "AG2", "B11", "AG11", "B20", "AG20", "B29", "AG29", "B38", "AG38")
For Each XD In Target
    hdf = adr2(Application.Match(XD.Address(0, 0), adr1, 0) - 1)
    hsat = Range(hdf).Row: hsut = Range(hdf).Column
    tur = Array("ı", "I", "İ", "Ç", "Ö", "Ü", "Ğ", "Ş", Chr(32))
    ing = Array("i", "i", "i", "c", "o", "u", "g", "s", Chr(95))
    For Each nsn In ActiveSheet.DrawingObjects
        If nsn.TopLeftCell.Address(0, 0) = hdf Then: nsn.Delete
    Next
    Set o = Sheets("ogrenci")
    numara = CStr(XD.Value): yol = ThisWorkbook.Path & "\Resimler\"
    sol = Range(hdf).Left + 1.5: ust = Range(hdf).Top + 1.5
    If IsNumeric(Application.Match(numara, o.[C:C], 0)) Then
        osat = Application.Match(numara, o.[C:C], 0)
        isim = o.Cells(osat, 7): sinif = Replace(o.Cells(osat, 1), "/", "")
        For k = 0 To UBound(tur): isim = Replace(isim, tur(k), ing(k)): Next
        isim = sinif & "_" & numara & "_" & LCase(isim) & ".jpg"
        Cells(hsat, hsut) = isim
        Cells(hsat, hsut).Offset(0, 7) = o.Cells(osat, 7)
        Cells(hsat + 1, hsut).Offset(0, 7) = o.Cells(osat, 4)
        Cells(hsat + 2, hsut).Offset(0, 7) = sinif
        Cells(hsat + 2, hsut).Offset(0, 16) = numara
        Cells(hsat + 3, hsut).Offset(0, 7) = o.Cells(osat, 12)
        Cells(hsat + 4, hsut).Offset(0, 7) = o.Cells(osat, 13)
        If Dir(yol & isim) = Empty Then GoTo sonraki
        Set rsm = ActiveSheet.Shapes.AddPicture(yol & isim, True, True, sol, ust, 82, 106)
    Else
        Range(Cells(hsat, hsut), Cells(hsat + 5, hsut + 7)).ClearContents
        Range(Cells(hsat, hsut + 14), Cells(hsat + 1, hsut + 27)).ClearContents
        Range(Cells(hsat + 2, hsut + 14), Cells(hsat + 2, hsut + 19)).ClearContents
        Range(Cells(hsat + 2, hsut + 23), Cells(hsat + 2, hsut + 27)).ClearContents
        Range(Cells(hsat + 3, hsut + 14), Cells(hsat + 5, hsut + 27)).ClearContents
    End If
sonraki: Next
End Sub


adresinde alt taraftaki input alanına aşağıdaki kodu yazıp gönderdim.

VBA:
For Each XD In Target
MsgBox XD.Address(0, 0)
Next

Yapay zekanın verdiği cevap aşağıdaki gibi...

Bu VBA kodu, For Each döngüsü kullanarak, Target değişkenindeki her bir hücre için bir MsgBox mesaj kutusu gösterir. XD değişkeni, her bir döngü adımında Target değişkenindeki bir hücreyi temsil eder.
MsgBox XD.Address(0, 0) satırı, XD değişkenindeki hücrenin adresini belirli bir referans stili ve göreceli satır/sütun referansları kullanarak metin olarak döndürür. 0 parametresi, satır ve sütun referanslarının göreceli (yani, hareketli) olduğunu belirtir. Böylece, hücrenin adresi, döngü içinde hareket ederken değişir.
Örneğin, eğer Target değişkeni A1:B2 aralığındaki hücreleri içeriyorsa, bu kod, önce A1 hücresinin adresini, sonra B1, sonra A2 ve en son olarak B2 hücrelerinin adreslerini MsgBox mesaj kutularında gösterecektir.
Bu kod örneği, hücrelerin adreslerini veya adreslerindeki diğer özellikleri (Row, Column, Value vb.) kullanarak hücreler üzerinde çeşitli işlemler yapmak için bir temel sağlayabilir.

VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("BK2:BK6, BN2:BN6")) Is Nothing Then Exit Sub
adr1 = Array("BK2", "BK3", "BK4", "BK5", "BK6", "BN2", "BN3", "BN4", "BN5", "BN6")

For Each XD In Target
hdf = adr2(Application.Match(XD.Address(0, 0), adr1, 0) - 1)
Next
End Sub

Yapay zekanın verdiği cevap aşağıdaki gibi...

Bu VBA kodu, bir Excel çalışma sayfasında belirtilen hücrelerde (BK2:BK6 ve BN2:BN6) herhangi bir değişiklik yapıldığında çalıştırılacak Worksheet_Change olayı için bir işleyici (handler) olarak kullanılır.

Intersect(Target, Range("BK2:BK6, BN2:BN6")) ifadesi, değiştirilen hücrelerin, BK2:BK6 ve BN2:BN6 aralıklarındaki hücrelerle kesişip kesişmediğini kontrol eder. Eğer kesişim yoksa, olay işleyicisi işlem yapmadan çıkar.

adr1 değişkeni, BK2:BK6 ve BN2:BN6 aralıklarındaki hücrelerin adreslerini içeren bir dizi olarak tanımlanır.

Daha sonra For Each döngüsü, Target aralığındaki her bir hücre için çalıştırılır. XD değişkeni, her döngü adımında Target aralığındaki bir hücreyi temsil eder.

Application.Match(XD.Address(0, 0), adr1, 0) - 1 ifadesi, XD değişkenindeki hücrenin adresini adr1 dizisindeki adreslerle karşılaştırır ve eşleşen adresin dizideki indisini döndürür. -1 çıkarma işlemi, eşleşen adresin dizideki indisinden bir önceki indisi elde etmek için kullanılır.

hdf değişkeni, eşleşen hücrenin adresine karşılık gelen bir başka diziden alınan bir değerle doldurulur. Bu kodda adr2 dizisi tanımlanmamıştır, bu nedenle hdf değişkeni kodun geri kalanında kullanılmayabilir.

Bu kod örneği, değiştirilen hücrelerin adreslerine göre farklı işlemler yapmak için bir temel sağlar.

Son olarak Yapay zekaya
vba Application.Match kullanımı hakkında bilgi
şeklinde yazıp arattım.
Bana aşağıdaki cevabı yazdı.

VBA'da Application.Match fonksiyonu, bir dizi içinde belirli bir öğenin pozisyonunu döndürmek için kullanılır. Bu fonksiyon genellikle, belirli bir aralıkta veya bir dizi içindeki bir değeri bulmak için kullanılır.

Application.Match fonksiyonu, aşağıdaki gibi kullanılır:

VBA:
Application.Match(aranan_değer, arama_dizisi, arama_yöntemi)
  • aranan_değer: arama yapılacak değerdir.
  • arama_dizisi: arama yapılacak dizi veya aralıktır.
  • arama_yöntemi: arama yöntemidir. Varsayılan olarak, arama yöntemi 1 olarak ayarlanır, yani dizideki ilk eşleşen değeri döndürür. Eğer arama yöntemi olarak 0 kullanılırsa, tam eşleşme olması gerekmektedir.
Application.Match fonksiyonu, aranan değeri bulursa, arama sonucu, arama dizisi içindeki aranan değerin pozisyonunu döndürür. Eğer aranan değer bulunamazsa, #N/A hatası döndürür.

Örnek olarak, aşağıdaki kod bloğu, "Elma" kelimesinin A1:A5 aralığındaki hücrelerde bulunup bulunmadığını kontrol eder ve bulunursa pozisyonunu i değişkenine kaydeder:

VBA:
Dim i as Long
i = Application.Match("Elma", Range("A1:A5"), 0)

If Not IsError(i) Then
MsgBox "Elma hücresi " & i & ". satırda bulundu."
Else
MsgBox "Elma hücresi bulunamadı."
End If
Bu örnekte, Application.Match fonksiyonu, "Elma" kelimesini A1:A5 aralığındaki hücrelerde arar ve bulduğu takdirde, "i" değişkenine bulduğu hücrenin satır numarasını kaydeder. Sonra, IsError işlevi ile i değişkeninin hata değeri içerip içermediği kontrol edilir. Hata değeri içermiyorsa, MsgBox işlevi ile hücrenin bulunduğu satır numarasını bildiren bir ileti penceresi görüntülenir. Eğer hata değeri içeriyorsa, "Elma hücresi bulunamadı" mesajı görüntülenir.

Yapay zekayı kullandığınız ilginç kullanımları buraya yazarsak sanırım daha açıklayıcı olacaktır.
Örneğin şuan forumda soracağım örnek bir dosya hazırlayacağım ancak orijinal dosyadaki ad ve soyadları yani kişisel bilgileri kullanmak istemiyorum.
Yapay zekaya şöyle yazdım.
Türkçe 160 tane isim yaz.
Şuan yazıyor. Bitince Soyadı yazmasını isteyeceğim
  1. Ahmet
  2. Ali
  3. Aylin
  4. Azra
  5. Baran
  6. Bedirhan
  7. Begüm
  8. Beren
  9. Berk
  10. Berra
  11. Betül
  12. Beyza
vba 505, 507 ve 532 ile başlayan 10 haneli 150 tane sayı üreten kod

Cevap

Kod:
Sub GenerateNumbers()
    Dim prefix As Variant
    Dim number As String
    Dim i As Integer
  
    Randomize 'Rastgele sayı üretmek için gereklidir
  
    prefix = Array("505", "507", "532")
  
    '150 adet sayının oluşturulması ve yazdırılması
    For i = 1 To 150
        number = prefix(Int(Rnd() * 3)) '0-2 arasında rastgele bir sayı seçer
        For j = 1 To 7 'Rastgele 7 basamaklı sayının oluşturulması
            number = number & Int(Rnd() * 10) '0-9 arasında rastgele bir sayı seçer ve sayıya ekler
        Next j
        'Sayının Excel çalışma sayfasına yazdırılması
        Range("A" & i).Value = number
    Next i
End Sub

Bu kod, "GenerateNumbers" adlı bir alt-rutin oluşturur ve 505, 507 veya 532 ile başlayan 10 haneli 150 adet rastgele sayı oluşturur. Kodu kullanmak için, VBA editörüne gidin ve yeni bir modül oluşturun. Ardından, yukarıdaki kodu yapıştırın ve modülü kaydedin. Kodu çalıştırmak için, Excel çalışma sayfanıza gidin ve bir hücreye "=GenerateNumbers()" yazın. Bu, 505, 507 veya 532 ile başlayan rastgele 10 haneli 150 sayıyı A1'den A150'ye kadar olan hücrelere yazacaktır.

Biraz zorlayalım.

VBA ile 82 piksel genişliği ve106 piksel yüksekliği olan 3 adet JPG dosyası oluştur. Resimlerin içerisine sırasıyla Ali Ak, Ahmet ŞEN, Halil KUZU yaz. Bu dosyaların içine sırasıyla "Ali Ak", "Ahmet ŞEN" ve "Halil KUZU" yazısını ekle. Resim dosyalarının isimlerini, bir dizi içerisindeki sırasıyla ,"39530444653", "44897336284" ve "74121559037" olarak isimlendir ve "C:\Users\pc\Desktop\Resimler" dizinine kaydet.

Cevap

Kod:
Sub createProfilePhotos()
   
    ' Resim boyutu
    Dim width As Integer: width = 82
    Dim height As Integer: height = 106
   
    ' Metin ayarları
    Dim fontName As String: fontName = "Calibri"
    Dim fontSize As Integer: fontSize = 14
    Dim fontColor As Long: fontColor = RGB(255, 255, 255) ' Beyaz renk
   
    ' İsimler ve dosya isimleri
    Dim names As Variant
    names = Array("Ali Ak", "Ahmet ŞEN", "Halil KUZU")
    Dim fileNames As Variant
    fileNames = Array("39530444653.jpg", "44897336284.jpg", "74121559037.jpg")
   
    ' Resim oluşturma ve metin yazdırma
    Dim i As Integer
    For i = LBound(names) To UBound(names)
        Dim img As Object
        Set img = CreateObject("WIA.ImageFile")
       
        ' Resim boyutu ayarları
        img.Width = width
        img.Height = height
       
        ' Resim arka plan rengi
        Dim bgColor As Long: bgColor = RGB(0, 0, 0) ' Siyah renk
        img.FillColor bgColor
       
        ' Metin ayarları
        Dim text As String: text = names(i)
        Dim textFont As Object
        Set textFont = CreateObject("WIA.VectorFont")
        textFont.Name = fontName
        textFont.Size = fontSize
        textFont.Color = fontColor
       
        ' Metin konumu
        Dim textX As Integer: textX = 10
        Dim textY As Integer: textY = height - 30
       
        ' Metni resme yazdırma
        img.DrawText text, textX, textY, textFont
       
        ' Dosya adı ve kayıt yeri
        Dim filePath As String
        filePath = "C:\Users\pc\Desktop\Resimler\" & fileNames(i)
       
        ' Resmi dosyaya kaydetme
        img.SaveFile filePath
    Next i

End Sub

Bu kod, önceden belirlenmiş isimleri ve dosya isimlerini kullanarak 82 piksel genişliğinde ve 106 piksel yüksekliğinde 3 adet JPG dosyası oluşturacaktır. Resimlerin içine sırasıyla Ali Ak, Ahmet ŞEN ve Halil KUZU yazılacaktır. Dosyalar "C:\Users\pc\Desktop\Resimler" dizinine kaydedilecektir.

Bunun dışında aklınıza ne gelirse o şekilde aratıp çıkan sonuçlara göre konuyu anlayıp örnekleri inceleyebilirsiniz.
 
DMCA.com Protection Status
Geri
Üst