- Katılım
- 15 Mart 2005
- Mesajlar
- 42,738
- Excel Vers. ve Dili
- Microsoft 365 Tr-En 64 Bit
Tek bir dosyadan mı veri alınacak?
DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Evet Korhan bey. Data isimli yada ismi daha farklı olan bir dosyadan veri alınacak, isim değişken olacak yani.Tek bir dosyadan mı veri alınacak?
Dosya içindeki adı sheet1 yada sayfa1 olacaktır Office diline göre, yani sanırım o da değişken oluyor.Peki dosyanın içindeki sayfa adı sabit mi?
Korhan bey öncelikle emeğiniz için çok teşekkür ederim. İki adet ricam olacak. Birincisi "Rapor" dan "Aylık Ebat dönüş" diye değiştirdiğim sheet'de Text yada sayı olarak gelmesi gereken veriler tarih olarak geliyor bunu nasıl düzeltebilirim? İkincisi yine bu Aylık ebat dönüş sheet'ine veri eklemek istediğimde nereye müdahale etmeliyim? Yardımlarınızı rica ederim.Deneyiniz.
Ayrıca Aylık ebat dönüşü sheet'inden Alt toplam değerlerini de çıkarabilir miyiz acaba?Korhan bey öncelikle emeğiniz için çok teşekkür ederim. İki adet ricam olacak. Birincisi "Rapor" dan "Aylık Ebat dönüş" diye değiştirdiğim sheet'de Text yada sayı olarak gelmesi gereken veriler tarih olarak geliyor bunu nasıl düzeltebilirim? İkincisi yine bu Aylık ebat dönüş sheet'ine veri eklemek istediğimde nereye müdahale etmeliyim? Yardımlarınızı rica ederim.
Bu iki konu ile ilgili yorumunuz nedir peki?Merhaba,
Makro yazmayı bilmiyorsanız müdahale etmeniz zor olur.
Yine de paylaşayım.
Dizi bölümüne müdahale etmeniz gerekiyor. Aşağıdaki satırları değiştirmelisiniz.
ReDim Liste(1 To UBound(Veri), 1 To 4)
Liste(Say, 4) = Veri(X, 8)
Dilerseniz raporlama kısmında olması gereken bölümlerin son hali ile dosyanızı paylaşın kodu ona göre revize edelim.
Yok eğer ben kendim yapmak istiyorum derseniz bu rapor yerine Pivot Table (Özet Tablo) kullanın. Sizin açınızdan daha kullanışlı olabilir.
Option Explicit
Sub Verileri_Aktar()
Dim Dosya As Variant, Zaman As Double, Baglanti As Object, S1 As Worksheet
Dim Tum_Tablolar As Object, Sayfa As Object, Dizi As Object, S2 As Worksheet
Dim Sayfa_Adi As String, Sorgu As String, Kayit_Seti As Object
Dim Son As Long, Veri As Variant, X As Long, Aranan As String, Say As Long
Dosya = Application.GetOpenFilename(FileFilter:="Excel Çalışma Kitapları (*.xl*),*.xl*", _
Title:="Lütfen Dosya Seçiniz", MultiSelect:=False)
Zaman = Timer
If Dosya <> False Then
Set Baglanti = CreateObject("AdoDb.Connection")
Set Tum_Tablolar = CreateObject("AdoX.Catalog")
Set Sayfa = CreateObject("AdoX.Table")
Set Dizi = CreateObject("Scripting.Dictionary")
Set S1 = Sheets("Düzenlenmiş Data")
Set S2 = Sheets("Aylık Ebat Dönüş")
S1.Range("A2:L" & S1.Rows.Count).Clear
S2.Range("A2:D" & S1.Rows.Count).Clear
If Dosya <> ThisWorkbook.FullName Then
Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
Dosya & ";Extended Properties=""Excel 12.0;Hdr=No"""
Tum_Tablolar.ActiveConnection = Baglanti
For Each Sayfa In Tum_Tablolar.Tables
If Replace(Sayfa.Name, "'", "") Like "*$" And InStr(1, Sayfa.Name, "Print_Area") = 0 Then
Sayfa_Adi = Sayfa.Name
Exit For
End If
Next
Sorgu = "Select F29,F4,F7,F8,F1,F2,F9,F14,F15,F10,F22,F23 From [" & Sayfa_Adi & "A2:CA]"
Set Kayit_Seti = Baglanti.Execute(Sorgu)
S1.Cells(S1.Rows.Count, 1).End(3)(2, 1).CopyFromRecordset Kayit_Seti
S1.Range("A2:B" & S1.Rows.Count).NumberFormat = "dd.mm.yyyy"
S1.Columns.AutoFit
If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
If Baglanti.State <> 0 Then Baglanti.Close
End If
Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
If Son = 1 Then
MsgBox "Veri bulunamadı!", vbCritical
GoTo 10
ElseIf Son >= 2 Then
If Son = 2 Then Son = 3
Veri = S1.Range("A2:I" & Son).Value
ReDim Liste(1 To UBound(Veri), 1 To 4)
For X = LBound(Veri) To UBound(Veri)
Aranan = Veri(X, 1) & "|" & Veri(X, 3)
If Not Dizi.Exists(Aranan) Then
Say = Say + 1
Dizi.Add Aranan, Say
Liste(Say, 1) = Format(Veri(X, 1), "mmmm")
Liste(Say, 2) = Veri(X, 3)
Liste(Say, 3) = 1
Liste(Say, 4) = Veri(X, 8)
Else
Liste(Dizi.Item(Aranan), 3) = Liste(Dizi.Item(Aranan), 3) + 1
Liste(Dizi.Item(Aranan), 4) = Liste(Dizi.Item(Aranan), 4) + Veri(X, 8)
End If
Next
If Say > 0 Then
S2.Range("A2").Resize(Say, UBound(Liste, 2)) = Liste
S2.Range("A2:D" & S2.Rows.Count).Sort Key1:=S2.Range("A2"), Order1:=xlAscending, OrderCustom:=5
S2.Range("B2:B" & S2.Rows.Count).NumberFormat = "General"
S2.Columns.AutoFit
S2.Select
End If
MsgBox "Veri aktarımı tamamlanmıştır." & Chr(10) & Chr(10) & _
"İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End If
10
Set Kayit_Seti = Nothing
Set Baglanti = Nothing
Set Tum_Tablolar = Nothing
Set Sayfa = Nothing
Set Dizi = Nothing
Set S1 = Nothing
Set S2 = Nothing
Else
MsgBox "Dosya seçimi yapmadığınız için işleminiz iptal edilmiştir.", vbCritical
End If
End Sub
Korhan bey1-2 nolu sorunlar için aşağıdaki kodu deneyiniz. Bakalım sorun düzelecek mi?
C++:Option Explicit Sub Verileri_Aktar() Dim Dosya As Variant, Zaman As Double, Baglanti As Object, S1 As Worksheet Dim Tum_Tablolar As Object, Sayfa As Object, Dizi As Object, S2 As Worksheet Dim Sayfa_Adi As String, Sorgu As String, Kayit_Seti As Object Dim Son As Long, Veri As Variant, X As Long, Aranan As String, Say As Long Dosya = Application.GetOpenFilename(FileFilter:="Excel Çalışma Kitapları (*.xl*),*.xl*", _ Title:="Lütfen Dosya Seçiniz", MultiSelect:=False) Zaman = Timer If Dosya <> False Then Set Baglanti = CreateObject("AdoDb.Connection") Set Tum_Tablolar = CreateObject("AdoX.Catalog") Set Sayfa = CreateObject("AdoX.Table") Set Dizi = CreateObject("Scripting.Dictionary") Set S1 = Sheets("Düzenlenmiş Data") Set S2 = Sheets("Aylık Ebat Dönüş") S1.Range("A2:L" & S1.Rows.Count).Clear S2.Range("A2:D" & S1.Rows.Count).Clear If Dosya <> ThisWorkbook.FullName Then Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _ Dosya & ";Extended Properties=""Excel 12.0;Hdr=No""" Tum_Tablolar.ActiveConnection = Baglanti For Each Sayfa In Tum_Tablolar.Tables If Replace(Sayfa.Name, "'", "") Like "*$" And InStr(1, Sayfa.Name, "Print_Area") = 0 Then Sayfa_Adi = Sayfa.Name Exit For End If Next Sorgu = "Select F29,F4,F7,F8,F1,F2,F9,F14,F15,F10,F22,F23 From [" & Sayfa_Adi & "A2:CA]" Set Kayit_Seti = Baglanti.Execute(Sorgu) S1.Cells(S1.Rows.Count, 1).End(3)(2, 1).CopyFromRecordset Kayit_Seti S1.Range("A2:B" & S1.Rows.Count).NumberFormat = "dd.mm.yyyy" S1.Columns.AutoFit If Kayit_Seti.State <> 0 Then Kayit_Seti.Close If Baglanti.State <> 0 Then Baglanti.Close End If Son = S1.Cells(S1.Rows.Count, 1).End(3).Row If Son = 1 Then MsgBox "Veri bulunamadı!", vbCritical GoTo 10 ElseIf Son >= 2 Then If Son = 2 Then Son = 3 Veri = S1.Range("A2:I" & Son).Value ReDim Liste(1 To UBound(Veri), 1 To 4) For X = LBound(Veri) To UBound(Veri) Aranan = Veri(X, 1) & "|" & Veri(X, 3) If Not Dizi.Exists(Aranan) Then Say = Say + 1 Dizi.Add Aranan, Say Liste(Say, 1) = Format(Veri(X, 1), "mmmm") Liste(Say, 2) = Veri(X, 3) Liste(Say, 3) = 1 Liste(Say, 4) = Veri(X, 8) Else Liste(Dizi.Item(Aranan), 3) = Liste(Dizi.Item(Aranan), 3) + 1 Liste(Dizi.Item(Aranan), 4) = Liste(Dizi.Item(Aranan), 4) + Veri(X, 8) End If Next If Say > 0 Then S2.Range("A2").Resize(Say, UBound(Liste, 2)) = Liste S2.Range("A2:D" & S2.Rows.Count).Sort Key1:=S2.Range("A2"), Order1:=xlAscending, OrderCustom:=5 S2.Range("B2:B" & S2.Rows.Count).NumberFormat = "General" S2.Columns.AutoFit S2.Select End If MsgBox "Veri aktarımı tamamlanmıştır." & Chr(10) & Chr(10) & _ "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation End If 10 Set Kayit_Seti = Nothing Set Baglanti = Nothing Set Tum_Tablolar = Nothing Set Sayfa = Nothing Set Dizi = Nothing Set S1 = Nothing Set S2 = Nothing Else MsgBox "Dosya seçimi yapmadığınız için işleminiz iptal edilmiştir.", vbCritical End If End Sub
Yazdığınız kodları tekrar tekrar silip yapıştırdım ama yine aynı sorun ile karşılaştım. Nerede yanlış yaptığımı inceleyebilmeniz için sizden aldığım kodların eklenmiş halindeki çalışma dosyasını paylaşıyorum. Yardımlarınızı rica ederim.Bende söylediğiniz şekilde bir durum oluşmadı. Düzgün şekilde sıralama oluyor.
Eklediğiniz dosyayı açtığımda sorun ortadan kalktı fakat şimdi dikkatimi çeken sarı ile boyadığım iki durum oluştu.Sayfadaki gruplandırmayı kaldırıp kodları çalıştırdığımda bende ekteki sonuç çıkıyor. Sanırım sizde sıralama kodlarındaki 5 parametresi sorun yaratıyor.
Bende SIRALA menüsü aşağıdaki görüntüdeki gibi. Eğer sizde 5. sıradaki liste yoksa sıkıntı olması normaldir.
Ekli dosyayı görüntüle 219369
Düzeltme!
Eklediğiniz dosyayı açtığımda sorun ortadan kalktı fakat şimdi dikkatimi çeken sarı ile boyadığım iki durum oluştu.
1- Düzenlenmiş data sheetindeki satırlar termin tarihine (Geçmişten-Geleceğe) göre sıralanmıyor.
2- Aylık ebat dönüşü sheetinde çap birimine göre doğru pivot yapmıyor. Örnek: Çektiğim data dosyasında Termine göre Mayıs ayında 48,3 ebatı toplanıp 26 olmalı. Burada ise 3 ayrı satırda ton bilgileri de farklı bir değerde geliyor.
Ayrıca bir yıl sütunu da getirebiliriz Aylık ebat dönüş sheet'ine o zaman çözülebilir mi acaba?Sıralama işlemi çözülür.
Mayıs ayındaki sıkıntıda çözülür. Fakat listenizde farklı yıllar var. Aylar özet hale getirilirken yıllar dikkate alınacak mı? Bu durumda nasıl bir tablo oluşacak?