ilgili dosyadan veri çekerken, mevcut dosyaları formül üzerinden çağırma

Katılım
7 Ocak 2017
Mesajlar
39
Excel Vers. ve Dili
2010
resim örnek

Merhaba,

Linkte bulunan görselde ki gibi bir dosyam mevcut. Her tarihin bir dosyası mevcut (ör: "01.10.2025", "02.10.2025" gibi bir klasörde bulunan dosyalarım var). Bu dosyalardan veri çekerek ilgili tarihin karşısına yazdırdığım bir formül kullanıyorum (formül örneği: "='D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\[01.10.2025.xlsx]Sayfa2 (2)'!$I$70" ).

Fakat bunu yaparken ör: 01.10.2025 tarihinde bulunan "='D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\[01.10.2025.xlsx]Sayfa2 (2)'!$I$70" formülü tüm tarihlere kopyalayıp tek tek tarihleri düzeltmekle uğraşıyorum. Aklıma şöyle birşey geldi; formülde gözüken 01.10.2025 tarihini birer sayı arttıracak bir formül (ör: gg+1.aa.yy gibi attım tamamen ya da a sütununda ilgili tarihler olduğundan "A2".xlsx gibi birşey) kullanamaz mıyım ? ya da formülizasyon ile çözülemeyecek ise makro yardımıyla tüm tarihlerin karşısına ilgili o tarihi getirecek bir koda ihtiyacım var sanırım.

Yardımlarınız için şimdiden teşekkürler...
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,384
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Link faydalı olabilir...

 
Katılım
7 Ocak 2017
Mesajlar
39
Excel Vers. ve Dili
2010
Merhaba,

Link faydalı olabilir...


Merhaba,

Videonuzu izledim teşekkürler. Veri kaynağı olarak dosyaları klasörden çektim fakat sadece dosyalarda bulunan 70. satırları almam gerekiyor şimdi onu tam yapamadım kurcalıyorum. Öneriniz var mı ?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,384
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu işlemi yaparken klasör seçimi yaptıktan sonra karşınıza POWER QUERY ekranı gelir. O ekranda "TRANSFORM DATA" butonuna tıklayınız. Açılan ekranda üst menüden "View" seçeneğine tıklayınız. Açılan menüden "Advanced Editor" seçeneğine tıklayınız.

Karşınıza bu işlemi yapan kod bloğu çıkacaktır. Oraya aşağıdaki kodu uygulayınız. Sonra "Done" butonuna tıklayıp işlemi tamamlayınız. Son olarak ilgili pencereyi kapatın. Kapatırken uyarı gelebilir. Orada KEEP diyerek pencereyi kapatınız.

C++:
let
    // 1️⃣ Klasör yolunu belirt
    KlasorYolu = "D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\",   // 🔧 Burayı kendi klasör yolunla değiştir

    // 2️⃣ Klasördeki dosyaları al
    Dosyalar = Folder.Files(KlasorYolu),

    // 3️⃣ Her dosyadan sadece I70 hücresini oku
    Veriler = Table.AddColumn(Dosyalar, "I70", each
        let
            // Dosya içeriğini oku
            Kaynak = Excel.Workbook(File.Contents([Folder Path] & [Name]), false),
            // İlk sayfayı al
            Sayfa = Kaynak{0}[Data],
            // I sütununu ve 70. satırı al
            Satir = try Sayfa{69}[Column9] otherwise null
        in
            Satir
    ),

    // 4️⃣ Gerekli sütunları seç
    Sonuc = Table.SelectColumns(Veriler, {"Name", "I70"})
in
    Sonuc

Eğer bu adımlar karışık ve zor gelirse aşağıdaki makro kodunu deneyebilirsiniz.

C++:
Option Explicit

Sub Update_Data()
    Dim File_Path As String, My_File As String, Rng As Range
   
    Application.ScreenUpdating = False
   
    File_Path = "D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\"
    
    For Each Rng In Range("A4:A30")
        My_File = File_Path & Rng.Text & ".xlsx"
        If Dir(My_File) <> "" Then
            My_File = "'" & File_Path & "[" & Rng.Text & ".xlsx]Sayfa2 (2)'!"
            Rng.Offset(, 2).Formula = "=INDEX(" & My_File & "I:I,70,1)"
            Rng.Offset(, 2).Value = Rng.Offset(, 2).Value
        End If
    Next
   
    Application.ScreenUpdating = True
   
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
7 Ocak 2017
Mesajlar
39
Excel Vers. ve Dili
2010
resim örneği

Merhaba,

Gönderdiğiniz makro kodu tam olarak işime yaradı. Ben de kendime göre uyarlamaya çalıştım fakat hata kodu almamama rağmen f sütununda ki
verileri çekemiyorum. Kodu ekliyorum bir yerde hata yapıyorum sanırım kontrol edebilir misiniz ?

Option Explicit

Sub Update_Data()
Dim File_Path1 As String, File_Path2 As String
Dim My_File As String, Rng As Range

Application.ScreenUpdating = False

File_Path1 = "D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\"

For Each Rng In Range("A4:A30")
My_File = File_Path1 & Rng.Text & ".xlsx"

If Dir(My_File) <> "" Then
My_File = "'" & File_Path1 & "[" & Rng.Text & ".xlsx]Sayfa2 (2)'!"
Rng.Offset(, 2).Formula = "=INDEX(" & My_File & "I:I,70,1)"
Rng.Offset(, 2).Value = Rng.Offset(, 2).Value
Rng.Offset(, 3).Formula = "=INDEX(" & My_File & "J:J,70,1)"
Rng.Offset(, 3).Value = Rng.Offset(, 3).Value
End If
Next

File_Path2 = "D:\YEDEK\YENİ LİSTELER\BURSA - UŞAK - EKİM\"

For Each Rng In Range("F4:F30")
My_File = File_Path2 & Rng.Text & ".xlsx"

If Dir(My_File) <> "" Then
My_File = "'" & File_Path2 & "[" & Rng.Text & ".xlsx]64BG038'!"
Rng.Offset(, 1).Formula = "=INDEX(" & My_File & "I:I,66,1)"
Rng.Offset(, 1).Value = Rng.Offset(, 1).Value
Rng.Offset(, 2).Formula = "=INDEX(" & My_File & "J:J,66,1)"
Rng.Offset(, 2).Value = Rng.Offset(, 2).Value
End If
Next

Application.ScreenUpdating = True

MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub





Bu işlemi yaparken klasör seçimi yaptıktan sonra karşınıza POWER QUERY ekranı gelir. O ekranda "TRANSFORM DATA" butonuna tıklayınız. Açılan ekranda üst menüden "View" seçeneğine tıklayınız. Açılan menüden "Advanced Editor" seçeneğine tıklayınız.

Karşınıza bu işlemi yapan kod bloğu çıkacaktır. Oraya aşağıdaki kodu uygulayınız. Sonra "Done" butonuna tıklayıp işlemi tamamlayınız. Son olarak ilgili pencereyi kapatın. Kapatırken uyarı gelebilir. Orada KEEP diyerek pencereyi kapatınız.

C++:
let
    // 1️⃣ Klasör yolunu belirt
    KlasorYolu = "D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\",   // 🔧 Burayı kendi klasör yolunla değiştir

    // 2️⃣ Klasördeki dosyaları al
    Dosyalar = Folder.Files(KlasorYolu),

    // 3️⃣ Her dosyadan sadece I70 hücresini oku
    Veriler = Table.AddColumn(Dosyalar, "I70", each
        let
            // Dosya içeriğini oku
            Kaynak = Excel.Workbook(File.Contents([Folder Path] & [Name]), false),
            // İlk sayfayı al
            Sayfa = Kaynak{0}[Data],
            // I sütununu ve 70. satırı al
            Satir = try Sayfa{69}[Column9] otherwise null
        in
            Satir
    ),

    // 4️⃣ Gerekli sütunları seç
    Sonuc = Table.SelectColumns(Veriler, {"Name", "I70"})
in
    Sonuc

Eğer bu adımlar karışık ve zor gelirse aşağıdaki makro kodunu deneyebilirsiniz.

C++:
Option Explicit

Sub Update_Data()
    Dim File_Path As String, My_File As String, Rng As Range
  
    Application.ScreenUpdating = False
  
    File_Path = "D:\YEDEK\YENİ LİSTELER\UŞAK - BURSA - EKİM\"
   
    For Each Rng In Range("A4:A30")
        My_File = File_Path & Rng.Text & ".xlsx"
        If Dir(My_File) <> "" Then
            My_File = "'" & File_Path & "[" & Rng.Text & ".xlsx]Sayfa2 (2)'!"
            Rng.Offset(, 2).Formula = "=INDEX(" & My_File & "I:I,70,1)"
            Rng.Offset(, 2).Value = Rng.Offset(, 2).Value
        End If
    Next
  
    Application.ScreenUpdating = True
  
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,384
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kod da bir sorun göremedim. Klasördeki dosya uzantıları belki farklıdır..
 
Üst