veri alma

Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
Merhaba, daha önceki kapalı dosyalardan veri alma konularını okudum. Benim bunun üzerine daha komplike bir sorum olacak. Şimdiye kadarki örneklerde hep sabit bir dosyadan veri alınmış. Dosya adı ve yolu belli. (c:\temp\test.xls örneğin.) Bunu hücredeki bir değeri dosya ismi olarak atayıp yapabilir miyiz?

Çalışma sayfası konusunda bir sorun yok. Basitçe diyelim ki A1 hücresindeki değerin adında olan bir sayfaya git ordan B1 değerini al Anasayfadaki B1e yapıştır:

Dim a As String
a = Range("A1").Value
Worksheets(a).Select
Range("B1").Select
Range("B1").Copy
Worksheets("AnaSayfa").Select
Range("B1").PasteSpecial

Bu olayı genişletip A1 hücresindeki değerin adında bir excel doyasına git ordan şu şu verileri al nasıl deriz? Yardımlarınızı bekliyorum. Teşekkürler.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Merhaba andersson,

Öncelikle Forumumuza Hoş Geldiniz.Size En azından Yol Gösterebilecek bir örnek hazırladım.Sayfada ve Kod içerisinde Gerekli açıklamaları yaptım.
Umarım İşinizi Görür.

NOT:Amatorce ama umarım işinizi görür.
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
teşekkürler rakkas. ama dediğin gibi biraz basit görünüyor. dosyayı açıp kapatıyor. bunu dosyayı açmadan kapalı dosya ile yapmamız mümkün mü? ado olmadan kapalı bir dosyadan veri nasıl çekeriz.
 

Kemal Demir

Özel Üye
Katılım
29 Temmuz 2004
Mesajlar
2,108
Basitlik İçin özür dilerim.Yeni oldugunuz için(Forumdaki Mesaj sayınıza göre düşündüm)size yukarıdaki çözümü önermiştim.

Aşagıdaki kodu kendinize göre revize ederseniz istediğiniz gerçekleşecektir.

Kod:
Sub Disverial()
Dim MyArg As String
Dim i As Integer
For i = 1 To 50
MyArg = "'C:\[Deneme.xls]Sayfa1'!R" & i
Cells(i, 1).Value = ExecuteExcel4Macro(MyArg & "C1")
Next
End Sub
Yukarıdaki kod "C:\Deneme.xls" dosyasının Sayfa1 sheetının A kolonundaki 50 veriyi almaktadır.

Umarım İstediğniz böyle birşeydir.

Kolay Gelsin.
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
tekrar çok teşekkürler. ExecuteExcel4Macro güzel gibi görünüyor. peki biraz daha zorlaştırırsak ExecuteExcel4Macro ile ulaştığımız kapalı dosyada varsayalım bir liste var. Bu listede COUNTIF ile sayım yaptırıp onun sonucunu alabilir miyim? COUNTIF teki aranan kelimeyi açık diyelim A1den alacak bunu kapalı dosyadaki listeden sayacak ve A2ye rakamı yazacak. ben de kasmaya devam ediyorum bakalım olacakmı :eek:)
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
..........peki biraz daha zorlaştırırsak ExecuteExcel4Macro ile ulaştığımız kapalı dosyada varsayalım bir liste var. Bu listede COUNTIF ile sayım yaptırıp onun sonucunu alabilir miyim?..........
Kapalı dosyadan alamazsınız, çünkü COUNTIF fonksiyonu kapalı dosyalarda çalışmaz.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Eğer merak ettiğiniz ExecuteExcel4Macro ile başka fonksiyonlar kullanılabilirmi ise evet kullanılabilir. Örneğin aşağıdaki kod C:\kitap1.xls dosyasının sayfa1 isimli sayfasının A sütunundaki dolu hücreleri sayar.


Kod:
msgbox ExecuteExcel4Macro("COUNTA('C:\[kitap1.xls]Sayfa1'!C1)")
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
Kapalı dosyadan alamazsınız, çünkü COUNTIF fonksiyonu kapalı dosyalarda çalışmaz.
bütün hayallerimi yıktınız :eek:)) kapalı dosyadan countif yapılamamasının sebebi nedir peki? basit bir makroyla dosyayı açıp countif yaptırıp kapattırsak olmaz mı?

ya da daha karmaşık countif yapacağım sütunu/sütunları kapalı dosyadan açık dosyama çekip orda saydırıp yaptırıp sonucunu yazdırıp çektiğim verileri silerbilirim heralde ama bu da sol elle sağ kulağı tutmak gibi birşey olur
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
bütün hayallerimi yıktınız :eek:)) kapalı dosyadan countif yapılamamasının sebebi nedir peki? basit bir makroyla dosyayı açıp countif yaptırıp kapattırsak olmaz mı?

ya da daha karmaşık countif yapacağım sütunu/sütunları kapalı dosyadan açık dosyama çekip orda saydırıp yaptırıp sonucunu yazdırıp çektiğim verileri silerbilirim heralde ama bu da sol elle sağ kulağı tutmak gibi birşey olur
Bir excel fonksiyonu olan COUNTIF ile kapalı dosyadan veri alınamaz bu şekilde tasarlanmıştır, sebebi konusunda fikrim yok. Ancak çözüm bitmiş değil elbette SUMPRODUCT fonksiyonunu kullanabilirsiniz. Bu fonksiyonun kullanımıda ancak aşağıdaki gibi olmaktadır. Bu kod A1 hücresindeki veriyi C:\kitap1.xls dosyasının sayfa1 isimli sayfasının A sütunundaki miktarını sayar ve A2 hücresine sonucu yazar.

Kod:
[a2] = "=SUMPRODUCT(('C:\[Kitap1.xls]Sayfa1'!A1:A65535=" & """" & [a1] & """" & ")*('C:\[Kitap1.xls]Sayfa1'!A1:A65535=" & """" & [a1] & """" & "))"
[a2] = [a2]
 
Katılım
21 Ocak 2007
Mesajlar
25
Excel Vers. ve Dili
Office 2007 Tr
Bu başlıkta Katkısı olan tüm arkadaşlara teşekkür ederim.
Merak ettiğim bir konu; A1den A90a kadar olan kısımda dosya adları yazılı excel dosyalarından 20. satırdaki verileri başka bir dosyada topluca altalta eklenmesini nasıl yapabilirim?
Teşekkürler...
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
dün çalışan kod bugün çalışmıyor. kodlar doğru. dosya kapalıyken çekmiyor. #REF! yazıyor hata olarak. dosya açıkken ama bütün verileri alıyor. anlamadım nasıl olur bu. yardım lütfenn
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
Kapalı dosyadaki A1:E7 arasını benim dosyamdaki C6:G12'ye getiriyor. hala neden çalışmadığını anlamış değilim.

Sub verial()

Dim MyArg As String
Dim i As Integer
Dim k As Integer
For i = 1 To 7
For k = 1 To 5
MyArg = "'" & [AF1] & "Sheet 1'!R" & i
Cells(i + 5, k + 2).Value = ExecuteExcel4Macro(MyArg & "C" & k)
Next
Next

End Sub
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
Sonunda buldum. Ulaşmaya çalıştığım dosyalar excel 5.0/95 yani eski formatlı kayıtlarmış. ExecuteExcel4Macro bunlardan kapalıyken veri çekemiyor. Aynı dosyaları excel 2002 ile yeni formatta kaydettim sorun yok tıkır tıkır çekiyor datayı :eek:)
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
leventm dün yazdığınız kod hakkında birşey soracağım


[d7] = "=SUMPRODUCT(('C:\kod\Discoverer\[10.xls]Sheet 1'!d1:d50000=" & """" & [b7] & """" & ")*('C:\kod\Discoverer\[10.xls]Sheet 1'!d1:d50000=" & """" & [b7] & """" & "))"
[d7] = [d7]


burada döngü kurmak istiyorum

arama için alacağı değer = i (for i = 1 to 50) a1, a2, a3, a4 diye değerleri alacak

aranacak dosyayı yol olarak tanımlamak istiyorum
yol = 'C:\kod\Discoverer\[10.xls]Sheet 1'

tabi buradaki 10.xls değeri de hücrelerden alınacak örneğin AD1-AD10 aralığından böylece dosya ismide değişecek 10.xls 11.xls 12.xls gibi

son olarak ta bulunan sonucun yazılacağı hücreler de = k (for k = 1 to 5) tabi bunu sütun yapmak istiyorum b1, c1, d1, e1, f1 diye yazacak

sizi yormayacaksa yardımcı olabilir misiniz
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
İsmi AD sütununda bulunan her bir dosyada A sütunundaki veriler aranacak ve sonuçları B den başlamak üzere ayrı sütunlara yazılacak. Doğrumu anlıyorum.
 

Levent Menteşoğlu

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

Kod:
Sub listele()
For a = 2 To [j65536].End(3).Row
yol = Cells(a, "j")
For b = 2 To [a65536].End(3).Row
Cells(b, a) = "=SUMPRODUCT(('" & yol & "Sheet 1'!d1:d50000=" & """" & Cells(b, "a") & """" & ")*('" & yol & "Sheet 1'!d1:d50000=" & """" & Cells(b, "a") & """" & "))"
Cells(b, a ) = Cells(b, a)
Next: Next
End Sub
 
Katılım
20 Şubat 2007
Mesajlar
11
Excel Vers. ve Dili
Excel 2002 SP3 İngilizce
bir örnek daha size. kodun değiştirilebilir genişletilebilir olması önemli. arama kriterlerinin sayısını yüzlerce ve il sayısını da onlarca yapabilirim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Son eklediğiniz dosyaya göre kod aşağıdaki gibi olmalıdır. İl sayısı ve arama kriterlerinin sayısını kod otomatikman kendisi alır. İlk döngü yolu L sütunundan alırken ikinci döngü kriterleri alır. L sütununu değiştirirseniz kod içindeki L sütununun geçtiği yerlerede yeni sütun harfini yazın.

Kod:
Sub listele()
For a = 2 To [l65536].End(3).Row
yol = Cells(a, "l")
For b = 2 To [c65536].End(3).Row
Cells(b, a + 2) = "=SUMPRODUCT(('" & yol & "Sheet 1'!d1:d50000=" & """" & Cells(b, "a") & """" & ")*('" & yol & "Sheet 1'!d1:d50000=" & """" & Cells(b, "a") & """" & "))"
Cells(b, a + 2) = Cells(b, a+2)
Next: Next
End Sub
 
Üst