Dış Veri Almak

Katılım
3 Haziran 2005
Mesajlar
17
Merhaba,
Belirli bir klasör altındaki (Mesela C:\excel) çok sayıdaki dosyadaki belirli bir sütununun (Mesela L sütunu) tüm içeriğini boş bir sayfaya B2'den itibaren yanyana eklemek istiyorum.

Daha önce benzer bir durumda sayın leventm ExecuteExcel4MAcro
komutunu kullanan bir kod önermişti...

http://www.excel.web.tr/viewtopic.php?t=5649&highlight=

Kendimce bunun üzerinde epey bir oynadıysam da pek bir şey elde edemedim.

Yardımcı olursanız çok sevinirim...
Saygılar
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Her dosyadaki sayfa sayısı kaçtır ve veri alınacak L sütunu hangi sayfadadır. Ayrıca sayfa isimleri aynımıdır?

B2 sütunundan başlayarak yanyana demişsiniz, yani B2,C2,D2...... şeklindemi kayıt edilecek yoksa altalta B2,B3,B4....... şeklindemi kayıt edilecektir.

Yukarıdaki soruları cevaplandırırsanız çözüm daha kolay olacaktır.
 
Katılım
3 Haziran 2005
Mesajlar
17
:oops:

Selam,
Soruyu daha düzgün sormam gerekirdi lütfen kusuruma bakmayın.

Her dosyada tek sayfa var ve hepsinin adı "1"
Evet, 1. dosyanın L sütunu B2'ye, 2. dosyanın L sütunuC2'ye, 3. dosyanın L sütunu D2'ye gibi...

Teşekkürler
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kodu deneyin.

[vb:1:99a7558658]Sub verial()
Set s1 = Sheets("sayfa1")
For Each dosya In CreateObject("Scripting.FileSystemObject").GetFolder("C:\excel").Files
sut = WorksheetFunction.CountA(s1.Rows(2))
For a = 1 To 65536
hucre = ExecuteExcel4Macro("'C:\excel\[" & dosya.Name & "]1'!R" & a & "C12")
If hucre = 0 Then GoTo 10
c = c + 1
s1.Cells(c + 1, sut + 2) = hucre
Next
10 c = 0
Next
End Sub
[/vb:1:99a7558658]
 
Katılım
3 Haziran 2005
Mesajlar
17
Teşekkürler
Ancak bir sorun var.
Dosyaların L sütünlarının sadece ilk iki satırını boş dosyaya aktarıyor. Geri kalan satırlar ise gelmiyor.
 
Katılım
3 Haziran 2005
Mesajlar
17
Çok da aceleci olmamak lazım herhalde.
Tekrar kontrol ettim. Problem zannedersem şundan kaynaklanıyor.
Verinin alınacaği sayfanın ilk iki satırı dolu, 3. satırda bir boşluk var ve geri kalan veriler 4. satırdan devam ediyor.
Boş satırın sorun olabileceğini düşünememiştim...
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
L sütunundaki verilerin kaçıncı satırda bittiğini bilmediğimden boşluk gördüğü anda taramayı bitirecek şekilde düşünmüştüm. Aradaki boşluklar sorun yaratacaktır. Bu durumda şunu sorayım L sütunundaki en son veri hangi satırdadır ve bu değişkenmidir. Ayrıca bütün dosyalarda veri sayısı aynımıdır.
 
Katılım
3 Haziran 2005
Mesajlar
17
Zamana bağlı yapılan ölçüm sonuçları bunlar.
Ve bireyler arasında farklılık gösterdiği için mutlak bir sonlanma noktası bulunmuyor.
Ã?rnek olarak bir sonuç dosyasını ekliyorum
Kimi bireyde işlem 10 dakikada biterken kimisinde süre (dolayısıyla veri sayısı) daha fazla veya az olabiliyor
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki şekilde deneyin.

[vb:1:4ea8b3009f]Sub verial()
Set s1 = Sheets("sayfa1")
For Each dosya In CreateObject("Scripting.FileSystemObject").GetFolder("C:\excel").Files
sut = WorksheetFunction.CountA(s1.Rows(2))
For a = 4 To 65536
hucre = ExecuteExcel4Macro("'C:\excel\[" & dosya.Name & "]1'!R" & a & "C12")
hucre1 = ExecuteExcel4Macro("'C:\excel\[" & dosya.Name & "]1'!R" & a+1 & "C12")
If hucre = 0 and hucre1=0 Then GoTo 10
c = c + 1
s1.Cells(c + 1, sut + 2) = hucre
Next
10 c = 0
Next
End Sub
[/vb:1:4ea8b3009f]
 
Katılım
3 Haziran 2005
Mesajlar
17
Sayın leventm
çok teşekkür ederim. Sorunsuz bir şekilde çalışıyor

:bravo: :bravo: :bravo:

Yalnız zannedersem 5. satırda
For a = 4 To 65536
For a = 1 To 65536 şeklinde olacak...

İyi Günler
 
Katılım
3 Haziran 2005
Mesajlar
17
Bu forumda emeği geçen herkese çok teşekkür ederim.
Bu sayede excel benim için 4 işlemi yapabilen hantal bir program olmaktan çıktı.
Kendimi bu konuda mümkün olduğunca geliştirmek istiyorum.
Sorularımla çok sıkıcı olmak istemiyorum ama öğrenmek için de başka çare yok sanırım.
Teşekkürler


Birkaç şey sormak istiyorum.
Sayon leventm'in önerdiği koda baktığımda bazı yerleri anlayamadım.
yardımcı olursanız sevinirim...


1. Set s1 = Sheets("sayfa1")

Burada herhalde s1 değişkenin sayfa1 olduğu ifade edilmiş

2. For Each dosya In CreateObject("Scripting.FileSystemObject").GetFolder("C:\excel").Files

Bu komut satırında "C:\excel klasöründeki tüm dosyaları kullan" mı denilmek isteniyor? Bu komutla tam olarak ne yapılabilir?

3. sut = WorksheetFunction.CountA(s1.Rows(2))

Burada CountA' komutuna baktım. Yanılmıyorsam BAÐ_DEÐ_DOLU_SAY komutuna karşılık geliyor. s1'in (Sayfa 1'in) 2. satırındaki değerleri mi sayıyor ??? :? Bu kısmı anlayamadım

4. For a = 1 To 25

5. hucre = ExecuteExcel4Macro("'C:\excel\[" & dosya.Name & "]1'!R" & a & "C12")

("'C:\excel\[" & dosya.Name & "]1'!R" & a & "C12")
c:\excel adresindeki dosyaların 1. sayfasındaki (a'yı çözemedim) 12. kolonu al
Doğru mu???

6. hucre1 = ExecuteExcel4Macro("'C:\excel\[" & dosya.Name & "]1'!R" & a + 1 & "C12")

7. If hucre = 0 And hucre1 = 0 Then GoTo 10

hucre hangi koşulda 0 oluyor ? Boş satıra denk gelmesi gibi mi??

8. c = c + 1

9. s1.Cells(c + 1, sut + 2) = hucre

10. Next

11. 10 c = 0

12. Next
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Yalnız zannedersem 5. satırda
For a = 4 To 65536
For a = 1 To 65536 şeklinde olacak...
Ã?rnek dosyanızda veriler 4 nolu satırdan başladığı için 4 değerini kullanmıştım. Bu önemli değil istediğiniz gibi değiştirebilirsiniz. Diğer sorularınıza gelince;

1-Tespitiniz doğrudur. Sheets("sayfa1") ifadesini kullanmak yerine yazımı kolaylaştırmak için bu tanımlamayı kısa bir değişkene atıyoruz.

2-For Each döngüsünde başlangıç ve son değerleri belli olmayan durumlarda kullanırız. Bu döngüde C:\excel içindeki tüm dosyalar bitene kadar taranacaktır. İstenirse dosya sayısı saydırılarak ilk ve son değerleri tanımlı olan bir döngüde kurulabilir.

3-Tespitiniz doğrudur.

5-"a" burada satır değerini ifade etmektedir. Satır sayısı değişken olduğu için bir döngüye bağlanması gereklidir.

7-hucre değeri boş olduğunda sıfır değeri kabul edilir. burada hucre ve hucre1 ile peşpeşe iki satır boş olduğunda döngü durdurulmaktadır.

8-c=c+1 kayıt yapılan sayfadaki satır nosunu tespit eder yani altalta yazılmasını sağlar.
 

aligunes

Altın Üye
Katılım
2 Mart 2005
Mesajlar
304
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Altın Üyelik Bitiş Tarihi
09-06-2025
sayın leventm bu konuda benimde bir sorum mevcuttu fakat cevap alamamıştım.

C:\excel klasöründeki tüm dosyalardaki a,b,c,d,e,f 1 den a,b,c,d,e,f 1500 verilerini bir sayfada toplamak c:\excel içindeki excel dosya isimleri rakamla adlandırılmış yani 1.5.15.18.22...gibi dosyalardaki sayfalar ise Kitap1 hepsi aynı ve bunların hepsinde değerler aynı satırda yani 1.satırda başlıyor fakat aynı bitmiyor bazıları 50 bazıları 500 . satıra kadar değer içeriyor bu değerler ışığında hanği formülü kullanmalıyım ilğinize teşekkür ederim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
her dosyadan alınan a,b,c,d,e,f sütunlarındaki verileri aynı sayfada alt alta mı yazılmasını istiyorsunuz. Birde şunu sorayım aynı dosyadaki a,b,c,d,e,f sütunlarındaki veri sayısı aynımıdır? Farklı dosyalarda farklı olabilir bu önemli değil.
 

aligunes

Altın Üye
Katılım
2 Mart 2005
Mesajlar
304
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Altın Üyelik Bitiş Tarihi
09-06-2025
bilgilerin alt alta yazılmasını istiyorum her dosyadaki satır sayısı farklı fakat veriler a,b,c,d,e,f sutununda satır sayısı en fazla 500
 
Üst