[Yardım]  İstenilen veriyi İstenilen Koşullara Göre Çekme

VBA Makrolar ile ilgili sormak istedikleriniz, yapmak istedikleriniz hakkında yardım alabileceğiniz bölümdür.

İstenilen veriyi İstenilen Koşullara Göre Çekme

İleti#1)  MSCvba » 07 Şub 2019 13:08

Merhaba,

Elimde yüzlerce excel tablosu bulunmakta ve bu tabloları istenilen koşullarla tek bir tabloya çekmek istiyorum. Excel tabloları ise belli bir düzende iç içe klasörler halinde yer almaktadır. İnternetten araştırdığım kadarı ile belli bir aşamaya kadar getirdim. Yaptığım aşama ise alt klasörlerden istenilen hücreden ve istenilen veriyi çekmekteyim. Yalnız indirmiş olduğum excel verilerinde ayda yılda bir güncelleme olsa da verinin yeri bir iki alta ya da üste çıkabilmektedir. Bu sebeple de her excel tablosundan doğru veriyi çekememekteyim. Çektiğim verinin tablodaki konuma göre değilde çekmek istediğim verinin ismine göre bu işlemi gerçekleştirmek istiyorum. Benim işlemini gerçekleştirdiğim kodlar aşağıda olduğu gibidir.

Kod: Tümünü seç
Sub GetFolder()

Set kaynak = CreateObject("shell.application").BrowseForFolder(0, "Kaynak Dosyalar? ??eren Klas?r? Se?in", 50, &H0)
If Not kaynak Is Nothing Then
strPath = kaynak.self.Path
Else
MsgBox "L?tfen Kaynak Klas?r Se?imini Yap?n?z !", vbInformation, "D?KKAT"
End If

Dim OBJ As Object, Folder As Object, File As Object

Set OBJ = CreateObject("Scripting.FileSystemObject")
Set Folder = OBJ.GetFolder(strPath)

Call ListFiles(Folder)

Dim SubFolder As Object

For Each SubFolder In Folder.SubFolders
    Call ListFiles(SubFolder)
    Call GetSubFolders(SubFolder)
Next SubFolder

End Sub

Sub GetSubFolders(ByRef SubFolder As Object)

Dim FolderItem As Object

For Each FolderItem In SubFolder.SubFolders
    Call ListFiles(FolderItem)
    Call GetSubFolders(FolderItem)
Next FolderItem

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ListFiles(ByRef Folder As Object)


Application.DisplayAlerts = False
For Each File In Folder.Files
       

        deg = "'" & File.ParentFolder & "\" & "[" & File.Name & "]" & "TMV" & "'!R" '//Veri al?nacak dosyalardaki sayfa isimi
        Sat = Cells(Rows.Count, "A").End(3).Row + 1
        Cells(Sat, 1) = File.Path & "\" & File.Name           'KLAS?R KONUMU
        Cells(Sat, 2) = ExecuteExcel4Macro(deg & 7 & "C4")    'D?NEM
        Cells(Sat, 3) = ExecuteExcel4Macro(deg & 6 & "C4")    'KURUM
        Cells(Sat, 4) = ExecuteExcel4Macro(deg & 97 & "C3")   'G?DER KALEM?
        Cells(Sat, 5) = ExecuteExcel4Macro(deg & 97 & "C4")   'OCAK
        Cells(Sat, 6) = ExecuteExcel4Macro(deg & 97 & "C5")   '?UBAT
        Cells(Sat, 7) = ExecuteExcel4Macro(deg & 97 & "C6")   'MART
        Cells(Sat, 8) = ExecuteExcel4Macro(deg & 97 & "C7")   'N?SAN
        Cells(Sat, 9) = ExecuteExcel4Macro(deg & 97 & "C8")   'MAYIS
        Cells(Sat, 10) = ExecuteExcel4Macro(deg & 97 & "C9")  'HAZ?RAN
        Cells(Sat, 11) = ExecuteExcel4Macro(deg & 97 & "C10") 'TEMMUZ
        Cells(Sat, 12) = ExecuteExcel4Macro(deg & 97 & "C11") 'A?USTOS
        Cells(Sat, 13) = ExecuteExcel4Macro(deg & 97 & "C12") 'EYL?L
        Cells(Sat, 14) = ExecuteExcel4Macro(deg & 97 & "C13") 'EK?M
        Cells(Sat, 15) = ExecuteExcel4Macro(deg & 97 & "C14") 'KASIM
        Cells(Sat, 16) = ExecuteExcel4Macro(deg & 97 & "C15") 'ARALIK


Next File

Application.ScreenUpdating = True

End Sub


Bahsettiğim gibi bu kodla sabit bir alanlardan verileri çekebiliyorum. Benim istediğim bir nevi düşey ara ile çekmek. İstenilen koşula göre verinin karşılığı. Hatta koşulları da başka bir sayfadan dinamik olarak belirleyebiliriz.

İyi çalışmalar.
Kullanıcı avatarı
MSCvba
 
Kayıt: 07 Nis 2017 22:31
Meslek: Memur
Yaş: 35
İleti: 7
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul

Cevap: İstenilen veriyi İstenilen Koşullara Göre Çekme

İleti#2)  askmadige34 » 07 Şub 2019 13:18

Sorunuzu örnek dosya ile desteklerseniz daha çabuk çözüm alırsınız.
askmadige34
Forum Moderatörü
 
Kayıt: 20 Kas 2015 11:04
Meslek: memur
Yaş: 38
İleti: 1690
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Kayseri

Cevap: İstenilen veriyi İstenilen Koşullara Göre Çekme

İleti#3)  MSCvba » 07 Şub 2019 13:54

Merhaba Tekrardan,

Örnek üzerinden gidersem. Ekte 3 tane excel tablosu yer almakta. Bu tablolardan yüzlerce var. Burada bana lazım olan "58.Kamu Tahakkuku(Fatura Geliri)". Ben bunu şuan mevcut makro ile çekebilmekteyim. Yalnız çektiğim tablolarda güncellemeler olabilmekte. Kalemlerde artma veya azalma olabilmekte. Bu nedenle de kodu her seferinde değiştirmek durumunda kalabilmekteyim. Bunun yerine düşey ara işlevini yerine getiren kodu buraya entegre etmem gerekecek. Hatta daha işlevsel hale getirmek adına 2. Sayfaya (1. Sayfada çekilecek veriler olacak)) veri koşulları (gider kalemleri birden fazla yazılabilir; örneğin; "58.Kamu Tahakkuku(Fatura Geliri)", "50.Kira Giderleri" gibi) koşullara yazılarak dinamik hale getirilebilir. Bu konuda bir yadım talep ediyorum.
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
MSCvba
 
Kayıt: 07 Nis 2017 22:31
Meslek: Memur
Yaş: 35
İleti: 7
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul

Cevap: İstenilen veriyi İstenilen Koşullara Göre Çekme

İleti#4)  MSCvba » 09 Şub 2019 00:44

Merhaba,

Cevap gelmemesinin sebebi anlatmak istediğimi anlatamamaktan mı kaynaklı, yoksa zorlayıcı bir istek mi?

İyi çalışmalar.
Kullanıcı avatarı
MSCvba
 
Kayıt: 07 Nis 2017 22:31
Meslek: Memur
Yaş: 35
İleti: 7
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: İstenilen veriyi İstenilen Koşullara Göre Çekme

İleti#5)  MSCvba » 14 Şub 2019 14:54

Sanırsam pek anlaşılır olmadı. O zaman şöyle sorayım;
Başak bir excel tablosundan veri çekerken VBA ile düşey arayı nasıl yapabilirim (Elimde yer alan 2 veriye göre) . Araştırdığım kadarı ile sql sorgulama mantığı ile de yapabileceğimi fark ettim. Bu ikisine örnek kodlar yazabilirseniz memnun olurum.

İyi çalışmalar.
Kullanıcı avatarı
MSCvba
 
Kayıt: 07 Nis 2017 22:31
Meslek: Memur
Yaş: 35
İleti: 7
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul

Cevap: İstenilen veriyi İstenilen Koşullara Göre Çekme

İleti#6)  MSCvba » 15 Şub 2019 22:41

Tekrardan Merhaba,
Yapmak istediğime yakın bir durum buldum ama onda da formülü çalıştırıyor ve değeri getiriyor. Ben yalnızca değer gelsin istiyorum.
Kod: Tümünü seç
Sub Makro1
Range("a2") = "=VLOOKUP(""Aranan Değer"", 'C:\Users\PC\Desktop\deneme\[veri.xls]TDMS'!C3:D40, 2, False)"
End Sub


Ya da başka nasıl bir yöntem uygulanabilirim.
Kullanıcı avatarı
MSCvba
 
Kayıt: 07 Nis 2017 22:31
Meslek: Memur
Yaş: 35
İleti: 7
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul

REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Forum Genel Makro Soruları

Online Kullanıcılar

Bu forumu görüntüleyenler: Yandex[Bot] ve 2 misafir

Bumerang - Yazarkafe