Excel Makro Örneği

| 08 Ağustos 2012 | 5 Yorum




Excel de makro

kavramı sıklıkla geçen bir terimdir. Peki makro nedir? nereye yazılır? nasıl çalışır ? yararı nedir gibi pek çok soruyu beraberinde getiriyor. Oldukça geniş bir konu olmasına rağmen yazımda bu konu hakkında temel bilgileri bulabilirsiniz.

Öncelikle Visual Basic kodlarinı kullanarak bu makroları yazıyoruz. Normalde Excel şeridi üzerinde Geliştirici adı altında bir sekmeye ihtiyacımız var ancak bu geliştirici sekmesi kapalı olarak bize sunuluyor. Proje veya daha üst düzeyde çalışmalarda kullanıldığından, kullanıcılara gizli olarak gelir. İlk olarak bizim bu sekmeyi görünür hale getirmemiz gerekiyor.

Excel Office 2010 da Dosya>Şeçenekler>Kategoriler> Şeridi Özelleştir seçenegi üzerinden takip eden ekran görüntüsüne ulaşalım. Yapmamız gereken Geliştirici şeçeneği önündeki kutucuğa tik işareti koymak olacaktır. Tamam düğmesini tıklatıktan sonra ana şeridinizde Geliştirici sekmesini görebilirsiniz.




Office 2007 de bu sekmeyi, Sol üst köşedeki Office düğmesini tıklatıp, Excel seçenekleri>Popüler sekmesi altındaki “Şerit gelişirici sekmesini göster” seçeneği ve tamam diyerek aktif hale getirebilirsiniz.

Şimdi Geliştirici sekmesi üzerinden Visual Basic düğmesini tıklatalım.

Burada Visual Basic Projects sekmesi seçip örnek olarak aşağıdaki kodları yazıyorum.

[php]
Sub SIRANO()
Dim sayi As Byte
For sayi = 1 To 8
Cells(RowIndex:=sayi, columnindex:=1) = sayi Next sayi
End Sub
[/php]

Kodu açıklamak istersek

Sub SIRANO()

End Sub

Kodumu bu iki başlık içerisine yazıyorum.

  • ve Bu kodumun adı SIRANO
  • Sayi adında bir değişkenim var ve veri tipi byte
  • For – Next benim döngüm 1 dan 8 e kadar 8 kez arasına yazılan fonksiyonu çalıştıracak, bu kodun içersine
  • Cells(RowIndex:=sayi, columnindex:=1) = sayi bunun anlamı matris olarak şu satır ve şu kolona şu değeri yaz, sayi bir değişken olup her döngüde bir arttığına göre sütun 1’e  yani A kolonuna (columnindex:=1) aşağı doğru sayıları yazacaktır.
  • Daha sonra dilerseniz bu 1 i 2 veya 3 yaparak hatta sayi yaparak makroyu çalıştırıp inceleyebilirsiniz.

Şimdi mavi disket ikonunu tıklatarak makroyu kaydedelim. Dosyayı ilk kez kaydediyorsak mutlaka makro içeren çalışma kitabı olarak kaydediyoruz yani dosya uzantısı .xlsm olmalı.

Şimdi Geliştirici sekmesinden Makro yazan düğmeyi tıklatalım. Karşımıza çıkan Makro  Penceresinde Seçenekler düğmesini tıklatalım ve Makromuza bir kısayol atayalım.

CTRT+a şeklinde bir kısayol ataması yaptım.

Artık Excel sayfamda bu kısa yolu kullandığımda  göreceğiniz sonucu size bırakıyorum.

Şimdi başka bir örnek yapalım;

[php]

Sub Makro1 ()

For i = 1 To 10

RandomSayi = Int((207 – 200 + 1) * Rnd + 200)
Range(“A” & i) = RandomSayi
Range(“A” & i).Font.Bold = False
Range(“A” & i).Font.Italic = False
Range(“A” & i).Font.Size = 10

Next i

For i = 1 To 10

If Range(“A” & i) = 202 Then
Range(“B” & i) = “202 bulundu”
Range(“A” & i).Font.Bold = True
Range(“A” & i).Font.Italic = True
Range(“A” & i).Font.Size = 48
Else
Range(“B” & i) = “-”
End If

Next i
End Sub

[/php]

Bu örnekte A sütununda 1 den 10 kadar rastgele 207 ile 200 arasında sayılar yazdıralım ve B sütununda, bu rastgele yazılan sayılardan hangisi 202 ise, bulundu diyelim ve A sütununda 202 yazan sayıyı bold, italic ve font büyüklüğünü 48 yapalım. Burada makro ile beraber rastgele sayı üretme RND fonsiyonun kullanışını , IF koşul yapısını , For Next gibi döngü yapılarınıda görmüş oluyoruz.

Örnekle ilgili Dip Notlar:

RND Fonksiyonu ( Rastgele Random Sayı)

RandomSayi= Int ((maxsayi- minsayi + 1) * Rnd + minsayi) şeklide bir kullanımı vardır. Fonksiyon , int tamsayı değerinde  max ve min arasında bir sayı üretimini sağlar.

RANGE ile Hücre Seçmek

Range(“A1″)=”EXCEL Macro”
Range(“A” & i) = “EXCEL Macro”
Range(Cells(i, 1), Cells(i, 1)) = “EXCEL Macro”

RANGE ile Aralık Seçmek

Range(“A1:C6”) = “EXCEL Macro”
Range(Cells(i, 1), Cells(i, 6)) = “EXCEL Macro”

Cells(satırindis,sütunindis)

 

Makroya bir düğmeye butonu oluşturularak tıklamaya bağlı olarakta aktive edilebilir. ve bu Sub ile başlayan End Sub ile biten alana yazacağınız komutların ise sınırı yok. Tüm hesaplamalar mantıksal karşılaştırmalar, döngüler veritabanı bağlantıları, değişkenler , fonksiyonlar, userform kullanımları gibi pek çok şey yapılabilir. Temel olarak makro mantığını ve kullanım şekli bu şekilde bol şanslar,

Dilerseniz aşağıdaki dosyadan daha geniş kapsamlı inceleyebilirsiniz.

isaretadam

Excel Kendi Kişisel Fonksiyon Kitabımız

PDF Formatında Dosya Linki:

Excel Macrolar (pdf formatında sıkıştırılmış zip)



Kategori: İp Uçları

Bora M. Deniz ()

Teknoloji, internet, ve bilişim gibi konularda paylaşımlarım ve yazılarımla 2011 den beri teknorapor.com dayım. Sosyal medya da yararlı bulduğunuz yazılarımı paylaşmanız dileklerimle... The author shares and writings IT, internet and technology news blog offering

Yorum (5)

Trackback URL | Yorum RSS

  1. makro konusunda etkili bir paylaşım olmuş. sade ve anlaşılır.

  2. Anonim diyor ki:

    it was good

  3. isimsiz diyor ki:

    Süper 🙂

  4. ibrahim diyor ki:

    Merhaba,
    Aşağıda bulunan makro örneğinde mailleri excele aktarıyor.
    Fakat sadece INBOX ı alıyor ben ise,
    Sadece belirli olan mailleri alsın yada INBOX altına oluşturduğum belirli bir klasöre gelen mailleri alsın istiyorum.
    Bunu düzenleyebilecek birisi varmıdır acaba?
    Yardımcı olursanız sevinirim.

    Option Explicit

    Private lRow As Long, x As Date, oWS As Worksheet

    Sub GetFromInbox()
    Const olFolderInbox = 6
    Dim olApp As Object, olNs As Object
    Dim oRootFldr As Object
    Dim lCalcMode As Long

    Set olApp = CreateObject(“Outlook.Application”)
    Set olNs = olApp.GetNamespace(“MAPI”)
    Set oRootFldr = olNs.GetDefaultFolder(olFolderInbox) ‘.Folders(InputBox(“Maillerin bulunduğu klasörü giriniz”, “BDD”))
    Set oWS = ActiveSheet

    x = Date
    lRow = 2
    lCalcMode = Application.Calculation
    Application.Calculation = xlCalculationManual
    ‘Application.ScreenUpdating = False
    GetFromFolder oRootFldr
    ‘ Application.ScreenUpdating = True
    Application.Calculation = lCalcMode

    Set oWS = Nothing
    Set oRootFldr = Nothing
    Set olNs = Nothing
    Set olApp = Nothing
    End Sub

    Private Sub GetFromFolder(oFldr As Object)
    Dim oItem As Object, oSubFldr As Object

    For Each oItem In oFldr.Items
    Range(“g1”).Value = lRow
    If TypeName(oItem) = “MailItem” Then
    With oItem
    ‘ If .Subject = “Is Goremezlik Raporu” Then
    oWS.Cells(lRow, 1).Value = .SenderName
    oWS.Cells(lRow, 2).Value = .to
    oWS.Cells(lRow, 3).Value = .cc
    oWS.Cells(lRow, 4).Value = .Subject
    oWS.Cells(lRow, 5).Value = .ReceivedTime
    oWS.Cells(lRow, 6).Value = .body
    lRow = lRow + 1
    ‘ If lRow = 10 Then Exit Sub
    ‘ End If
    End With
    End If
    Next

    ‘ Recurse all Subfolders
    For Each oSubFldr In oFldr.Folders
    GetFromFolder oSubFldr
    Next
    End Sub

  5. semih diyor ki:

    merhabalar pivotta otomotık rapor formatı oluşturdum ama rapor nosu fıltrede olmsaı gerekıyor , ben nasıl alırım hepsini bir seferde çıktı.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir