- Görüntüleme: 1K
- Cevaplar: 2
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.
adresinde alt taraftaki input alanına aşağıdaki kodu yazıp gönderdim.
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.
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:
Ö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:
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
Cevap
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
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.
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.
Ö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
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
- Ahmet
- Ali
- Aylin
- Azra
- Baran
- Bedirhan
- Begüm
- Beren
- Berk
- Berra
- Betül
- Beyza
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.