Kapalı Dosyadan Veri Alma

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Merhabalar,


Tek çalışma kitabında 01.01.2016 dan 30.05.2016 ya kadar sayfalar mevcut.
Boş bir sayfada 01.01.2016 - 31.01.2016 ya kadar olan tüm tüm sayfalardaki B5 hücrelerinde ki değerleri getirmek için nasıl bir formül girmem gerekiyor.

yani;

Kod:
='01.01.2016'!B5
Kod:
='02.01.2016'!B5
Kod:
='03.01.2016'!B5
den
Kod:
='31.05.2016'!B5
a kadar

gibi... Tarih kısmını (01.01.2016) tek seferde nasıl arttırabilirim ?

Teşekkür ederim.
 
Son düzenleme:

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.
Sanırım istediğiniz aşağıdaki gibi bir şey.
Formülü bir hücreye uygulayın ve aşağı doğru kopyalayın.
.
Kod:
=EĞER(EHATALIYSA(DOLAYLI("'"&METNEÇEVİR(SATIRSAY($B$1:B1);"00")&".01.2016'!B5"));"";DOLAYLI("'"&METNEÇEVİR(SATIRSAY($B$1:B1);"00")&".01.2016'!B5"))
 

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Merhaba.
Sanırım istediğiniz aşağıdaki gibi bir şey.
Formülü bir hücreye uygulayın ve aşağı doğru kopyalayın.
.
Kod:
=EĞER(EHATALIYSA(DOLAYLI("'"&METNEÇEVİR(SATIRSAY($B$1:B1);"00")&".01.2016'!B5"));"";DOLAYLI("'"&METNEÇEVİR(SATIRSAY($B$1:B1);"00")&".01.2016'!B5"))
Merhaba

Bir hücreye
Kod:
='01.01.2016'!B5
yazıp satırı aşağı doğru çektiğimde altta ki satırlar 02.01.2016 - 03.01.2016 - 04.01.2016 diye sayfaları arttırarak devam etmesini istiyorum.

Yardımlarınız için teşekkür ederim.
 

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Merhaba.
Sanırım istediğiniz aşağıdaki gibi bir şey.
Formülü bir hücreye uygulayın ve aşağı doğru kopyalayın.
.
Kod:
=EĞER(EHATALIYSA(DOLAYLI("'"&METNEÇEVİR(SATIRSAY($B$1:B1);"00")&".01.2016'!B5"));"";DOLAYLI("'"&METNEÇEVİR(SATIRSAY($B$1:B1);"00")&".01.2016'!B5"))
örnek dosya ektedir.
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Merhaba

Bir hücreye
Kod:
='01.01.2016'!B5
yazıp satırı aşağı doğru çektiğimde altta ki satırlar 02.01.2016 - 03.01.2016 - 04.01.2016 diye sayfaları arttırarak devam etmesini istiyorum.

Yardımlarınız için teşekkür ederim.
Sanırım Ömer Bey'in formülünü uygulamamışsınız. Ben uyguladığımda sizin istediğiniz sonucu elde ettim.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Önceki cevabımdaki formül de istediğiniz sonucu verir (B2 hücresine uygulayıp aşağı doğru kopyalanacak).
A sütunundaki tarihler belgenizde hazırsa aşağıdaki formülü
B2 hücresine uygulayıp aşağı doğru kopyaladığınızda da istediğiniz olur.
.
Kod:
=EĞER(EHATALIYSA(DOLAYLI("'"&METNEÇEVİR(A2;"gg.aa.yyyy")&"'!B5"));"";DOLAYLI("'"&METNEÇEVİR(A2;"gg.aa.yyyy")&"'!B5"))
 

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Önceki cevabımdaki formül de istediğiniz sonucu verir (B2 hücresine uygulayıp aşağı doğru kopyalanacak).
A sütunundaki tarihler belgenizde hazırsa aşağıdaki formülü
B2 hücresine uygulayıp aşağı doğru kopyaladığınızda da istediğiniz olur.
.
Kod:
=EĞER(EHATALIYSA(DOLAYLI("'"&METNEÇEVİR(A2;"gg.aa.yyyy")&"'!B5"));"";DOLAYLI("'"&METNEÇEVİR(A2;"gg.aa.yyyy")&"'!B5"))
Elinize sağlık istediğim gibi oldu. Teşekkür ederim
 

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Bu mantığı, kapalı bir kitabın tarih sıralı sayfalarından değerleri getirmek için kullanabilir miyiz ?

A Kitabından B Kitabına


Teşekkürler.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
DOLAYLI formülünün çalışması için diğer dosyanın açık olması gerekmektedir.
 

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Önceki cevabımdaki formül de istediğiniz sonucu verir (B2 hücresine uygulayıp aşağı doğru kopyalanacak).
A sütunundaki tarihler belgenizde hazırsa aşağıdaki formülü
B2 hücresine uygulayıp aşağı doğru kopyaladığınızda da istediğiniz olur.
.
Kod:
=EĞER(EHATALIYSA(DOLAYLI("'"&METNEÇEVİR(A2;"gg.aa.yyyy")&"'!B5"));"";DOLAYLI("'"&METNEÇEVİR(A2;"gg.aa.yyyy")&"'!B5"))


DOLAYLI formülünün çalışması için diğer dosyanın açık olması gerekmektedir.

Üstteki formül mantığına uygun olarak kapalı dosyanın tarih sıralı sayfalarında ki veriyi almak için ne yapmak gerek ?

Teşekkür ederim.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki kodları bir modüle kopyalayıp deneyiniz. Kodlar önce kaçıncı ay ve hangi yıl olduğunu sorar, daha sonra aynı klasörde bulunan kırmızı renkle belirtilen dosyadaki ilgili sayfaların B5 hücrelerindeki değerleri alacak formülü A2'den itibaren aşağı doğru yazar.

Normalde eğer aranan sayfa ilgili dosyada yoksa hata vermemesi gerekiyor ama nedense olmayan sayfaları da arıyor. Bunu çözemedim. Eğer ilgili tüm sayfalar varsa sorunsuz çalışacaktır, Olmayan sayfalar için de bir uyarı çıkıp hangi sayfadan alınacağını soracaktır. Bunu iptal düğmesine basarak geçebilirsiniz.

Kodlardaki kapalı.xlsx ifadesini kendi kapalı dosyanızın ismine göre değiştirmeyi unutmayınız. Ayrıca ben aynı klasörde ayarladım, başka klasörlerdeyse değişiklik yapmak gerekir:

Kod:
Sub Tarihli()
On Error Resume Next
ay = InputBox("Kaçıncı ay olduğunu belirtiniz." & Chr(10) & "(1-12 arası sayı giriniz)")
10:
If ay > 12 Or ay < 1 Then
    uyarı1 = MsgBox("1-12 arası sayı girmeniz gerekmektedir!", vbCritical)
    GoTo 10
End If
20:
yıl = InputBox("Hangi yıl olduğunu belirtiniz." & Chr(10) & "(4 basamaklı sayı giriniz)")
If yıl < 1000 Then
    uyarı2 = MsgBox("4 basamaklı bir sayı girmeniz gerekmektedir!", vbCritical)
    GoTo 20
End If
tarih1 = DateSerial(yıl, ay, 1)
tarih2 = WorksheetFunction.EoMonth(tarih1, 0)

For i = 1 To Day(tarih2)
    sayfa = WorksheetFunction.Text(DateSerial(Year(tarih1), Month(tarih1), i), "dd.mm.yyyy")
    For j = 1 To [kapalı.xlsx].Sheets.Count
        If [kapalı.xlsx].Sheets(j).Name = sayfa Then
            Cells(i + 1, "A").FormulaR1C1 = "='[kapalı.xlsx]" & sayfa & "'!R5C2"
            j = [kapalı.xlsx].Sheets.Count
        End If
    Next
Next

End Sub
 

Mehmet Sait

Altın Üye
Katılım
19 Ekim 2009
Mesajlar
834
Excel Vers. ve Dili
Office 2016 TR
Altın Üyelik Bitiş Tarihi
08-09-2028
Aşağıdaki kodları bir modüle kopyalayıp deneyiniz. Kodlar önce kaçıncı ay ve hangi yıl olduğunu sorar, daha sonra aynı klasörde bulunan kırmızı renkle belirtilen dosyadaki ilgili sayfaların B5 hücrelerindeki değerleri alacak formülü A2'den itibaren aşağı doğru yazar.

Normalde eğer aranan sayfa ilgili dosyada yoksa hata vermemesi gerekiyor ama nedense olmayan sayfaları da arıyor. Bunu çözemedim. Eğer ilgili tüm sayfalar varsa sorunsuz çalışacaktır, Olmayan sayfalar için de bir uyarı çıkıp hangi sayfadan alınacağını soracaktır. Bunu iptal düğmesine basarak geçebilirsiniz.

Kodlardaki kapalı.xlsx ifadesini kendi kapalı dosyanızın ismine göre değiştirmeyi unutmayınız. Ayrıca ben aynı klasörde ayarladım, başka klasörlerdeyse değişiklik yapmak gerekir:

Kod:
Sub Tarihli()
On Error Resume Next
ay = InputBox("Kaçıncı ay olduğunu belirtiniz." & Chr(10) & "(1-12 arası sayı giriniz)")
10:
If ay > 12 Or ay < 1 Then
    uyarı1 = MsgBox("1-12 arası sayı girmeniz gerekmektedir!", vbCritical)
    GoTo 10
End If
20:
yıl = InputBox("Hangi yıl olduğunu belirtiniz." & Chr(10) & "(4 basamaklı sayı giriniz)")
If yıl < 1000 Then
    uyarı2 = MsgBox("4 basamaklı bir sayı girmeniz gerekmektedir!", vbCritical)
    GoTo 20
End If
tarih1 = DateSerial(yıl, ay, 1)
tarih2 = WorksheetFunction.EoMonth(tarih1, 0)

For i = 1 To Day(tarih2)
    sayfa = WorksheetFunction.Text(DateSerial(Year(tarih1), Month(tarih1), i), "dd.mm.yyyy")
    For j = 1 To [kapalı.xlsx].Sheets.Count
        If [kapalı.xlsx].Sheets(j).Name = sayfa Then
            Cells(i + 1, "A").FormulaR1C1 = "='[kapalı.xlsx]" & sayfa & "'!R5C2"
            j = [kapalı.xlsx].Sheets.Count
        End If
    Next
Next

End Sub
Merhaba,

Çok güzel olmuş. Teşekkür ederim.
 
Son düzenleme:

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bu arada konu başlığını "Kapalı Dosyadan Veri Alma" gibi bir başlıkla değiştirmeniz, forum işleyişi açısından uygun olacaktır.
 
Üst