Kapalı Excel Kitabını Açmadan Makro ile İçinden Veri Çekmek

DEGARADO isimli Youtube kanalımız üzerinden bir arkadaşımız aşağıdaki gibi bir soru sormuş. Bende sorusuna binaen bu yazıyı hazırlayarak hem kendisine hemde aynı dertten muzdarip olabilecek herkese yardımcı olabilmek istedim. Arkadaşımızın sorusunu aynen buraya kopyalıyorum.

“Abi ağzına sağlık çok teşekkür ederiz. Abi bir sürü aynı tipte excel raporlarım var. Ben bu excel raporlarımın belli hücrelerinden bilgi alıp ayrı bir rapor oluşturmak istiyorum. Normalde her bilgi almak istediğin çalışma kitabını açıp kapatman gerekiyor. Çalışma kitabını hiç açmadan hücreden veriyi okumanın daha hızlı bir yolu varmıdır acaba? Şimdiden teşekkür ederim.”

Bu soruya cevabım elbette mümkün şeklinde olacaktır. Ancak bunu yapmak için Excel VBA (Visual Basic Application) yani kısaca makro yöntemini kullanmamız gerekmekte. Şimdi bunu nasıl yapabileceğimizi kısaca anlatmak istiyorum.

Soruyu daha kolay anlaşılabilmesi için kısaca özetlemek gerekirse;

Excel üzerinde kapalı olan çalışma kitabımızdaki verileri geçerli yani açık olan çalışma kitabımıza nasıl kopyalama ve aktarma işlemini yapabiliriz?

VBA Penceresine Açmanın Yolları

Bunun için öncelikle Aktif olarak çalışılacak Ms Excel dosyamızı açıyoruz ve ardından kod yazabilmek için VBA Penceresine (Visual Basic Application) geçiş yapıyoruz. Bunun için Sayfa adının üzerine sağ tık ve açılan pencereden Kod görüntüle diyebiliriz. Yada ALT + F11 tuşlarına basabiliriz. Yada Geliştirici sekmesi açıksa direk bu sekmeden Visual Basic bölümüne tıklayarak geçiş yapabiliriz.

Geliştirici sekmesi açık olmayan kişiler bu konuda detaylı bir anlatım yapmış olduğum yazıyı buraya tıklayarak inceleyebilirler.

Ardından açılan pencerede Sekmeler bölümünden Insert sekmesine ardından Module bölümüne tıklayarak yeni bir modül oluşturuyoruz. 

Böylelikle açılan yeni pencerede kodlarımızı yazmaya başlayabiliriz. Aşağıdaki kodları kopyalayıp bu açılan pencereye yapıştırmanız yeterlidir.

Kopyalamanız Gereken VBA Kodları

Private Sub KapaliExceldenVeriCekme()
Dim ilk, ikinci As Workbook
Dim Baslik As String
Dim Hucre1, Hucre2 As Range
Set ilk = Application.ActiveWorkbook
Baslik = "https://dilaverajder.com"
With Application.FileDialog(msoFileDialogOpen)
    .Filters.Clear
    .Filters.Add "Excel 2007-13", "*.xlsx; *.xlsm; *.xlsa"
    .AllowMultiSelect = False
    .Show
    If .SelectedItems.Count > 0 Then
        Application.Workbooks.Open .SelectedItems(1)
        Set ikinci = Application.ActiveWorkbook
        Set Hucre1 = Application.InputBox(prompt:="Kopyalamak İstediğiniz Hücreleri Seçin", Title:=Baslik, Default:="A1", Type:=8)
        ilk.Activate
        Set Hucre2 = Application.InputBox(prompt:="Yapıştıracağınız Yeri Seçin", Title:=Baslik, Default:="A1", Type:=8)
        Hucre1.Copy Hucre2
        Hucre2.CurrentRegion.EntireColumn.AutoFit
        ikinci.Close False
    End If
End With
End Sub

Makroyu Çalıştırma Yöntemleri

İşlemimizi tamamladık. Şimdi yapmamız gereken makroyu çalıştırıp işimize bakmaktır. Ancak bu makroyu çalıştırmak için bir kaç yöntem var ve sırası gelmişken kısaca bunlardan da bahsedeyim.

  1. Makromuzu VBA penceresinde F5 tuşuna basarak çalıştırabiliriz. 
  2. Excel üzerinden çalıştırmak için Excel de bize uygun bir bölüme bir şekil ekleyerek hazırladığımız makroyu bu şekle sağ tık yöntemi ile atayabiliriz.
  3. Daha kolay yöntemi ise yine Excel üzerinden Youtube kanalımda anlatımını yapmış olduğum Menülere makromuzu atayarak çalıştırabiliriz. Video muza buraya tıklayarak ulaşabilirsiniz.
  4. En kolay kullanım için ve tüm MS Excel Kitaplarımızda Makromuzu çalıştırabilmek için ise oluşturmuş olduğumuz makroyu bir eklenti haline haline getirerek her Excel kitabımızda kullanmayı sağlayabiliriz. Bunun içinde hazırlamış olduğum videoyu buraya tıklayarak izleyebilirsiniz.

Evet hangi yöntemi seçerseniz seçin yapmanız gereken Makroyu çalıştırdığınızda açılan pencereden veri çekmek istediğiniz Excel dosyasını seçmek ardından kopyalamak istediğiniz hücreleri mouse ile seçerek Tamam tuşuna basmaktır. Hemen ardından ise Aktif olan pencerede kopyalamış olduğunuz verileri yapıştıracağınız hücreyi seçerek tekrar Tamam tuşuna basmanız yeterli olacaktır.

Artık sadece veri almak için her Excel dosyasını açıp kopyalama işlemini yaptıktan sonra tekrar kapatmanıza gerek kalmayacaktır. Soruyu soran arkadaşımıza özel bir yazı gibi görünse de aslında bir çok kişinin işine yarayacak ve işlemlerini hızlandıracak pratik bir özellik olduğunu düşündüğüm için bu yazıyı hazırladım. Umarım faydasını görürsünüz.. Yazıyı uzun görüp işlemden sakın korkmayın ben sadece anlaşılmayan hiçbir nokta kalmasın diye detaylı bir şekilde anlatım yaptım. Bu yüzden yazımız biraz uzun oldu. İşlemimiz gerçekten çok kolay ve işlemimizi çok hızlandıracaktır.

Bu arada sizlere tekrar etmek istediğim bir konuyu da burada belirtmek istiyorum. Şayet konudan fayda gördüyseniz konunun altına yazacağınız bir ufak teşekkür yorumu ve herkesin yararlanabilmesi için sitemi referans göstererek paylaşım yapabilmeniz benim için gerçekten yazma şevkimin yok olmayarak yazma isteğimin devamını sağlamaktadır.  


7 yorum

NECDET · 03 Aralık 2021 13:22 tarihinde

Teşekkür ederiz. İşime çok yaradı. Emeğinize sağlık,

Atakan · 23 Nisan 2021 03:46 tarihinde

Hocam benim yardima ihtiyacim var.
Elimde bir excel dosyasi var ve bu dosyada yaklasik 20 ye yakin sayfa var her sayfada farkli veriler var örnegin sayfanin birinde isim soyisim telefon numaralari diger sayfada yine isim soyisim adres baska sayfa da yine isim soyisim sınıfı şubesi baska sayfada yine isim soyisim okul adı il ilcesi baska sayfada isim souisim tc gibi veriler var ve bu veriler hepside ayri sutun ve kolonlarda hucrelerde yazili benim istedigim C# yada java farketmez bir programcik yazarak arama yapicam tabi soyle olacak mesela 3 bolum olacak ben oralara ornegin 1. Satira sinifi 2. Satira şubesini 3. Satira okul adini yazacagim arama butonuna bastigimda bir pencerede o kişinin adını soyadini adresini telefon numarasini tc sini yada sayfalarda o isme ait nekadar bilgi varsa excel dosyasindaki butun sayfalarda arama yaparak ekrana getirmesini istiyorum bunu nasil yapabilirim

Atilla · 11 Ekim 2020 12:53 tarihinde

Makro kodlarınız mükemmel çalışıyor ve iş görüyor. Bu makro kodlarına kopyalanan verinin “değer olarak kopyalanmasını” sağlamak ve yapıştırma işlemini “kopyalanan hücrelerin kaynak sütun biçimlendirmelerini bozmadan” yapması için nasıl bir ek yapılmalı. Bu eklemeyi yapabilir misiniz.

idris · 04 Şubat 2020 02:23 tarihinde

öncelikle teşekkürler. sayenizde çok şey öğrendim Allah razı olsun. buradaki kod translate çeviri olmuş çalışmıyor. rica etsem orjinali koyarmısınız.

Emre · 17 Aralık 2019 16:29 tarihinde

Peki excel vba da oluşturulmuş bir form ile kapalı olan bir excel kitabına veri aktarma nasıl yapılır. İlgili bir anlatım veya videonuz var mı?

Anonim · 31 Ekim 2019 01:30 tarihinde

teşekkürler

Bir yanıt yazın

Avatar placeholder

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.