• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

İşlemi tüm dosyaya uygulama

  • Konbuyu başlatan Konbuyu başlatan Serdarrk
  • Başlangıç tarihi Başlangıç tarihi
Katılım
16 Şubat 2018
Mesajlar
76
Excel Vers. ve Dili
Excel 2007
Merhaba,

Aşağıdaki dosyada ve bunun gibi 20 ayrı dosyanın her birinde yaklaşık 250'şer sayfa bulunmakta. Amacım, diğer dosyalarda sütun isimleri değişmekle birlikte bu dosya için ; (I+U) / (J+V), I sütunu ve U sütunu toplamını J ve V sütunlarının toplamına bölmek, bu işlemi tüm dosyada uygulayıp sonuçları Y sütununda görmek. Bunu makro yada başka bir yolla yapmak mümkün müdür?


http://s7.dosya.tc/server3/lryuu1/01.02.1999-1.xls.html
 
Son düzenleme:
Merhaba

Aşağıdaki kodu kullanabilirsiniz.

Kod:
Sub ToplamaYap()
    Dim Dizin As String
    Dim Obj
    Dim ExD As Workbook
    Dim ExS As Worksheet
    Dim SonSatir As Long
    Dim Klasor As Scripting.Folder, Dosya As Scripting.File
    Set Obj = CreateObject("Scripting.FileSystemObject")
    
    Dizin = "c:\KlasorAdi" 'Buraya dosyalarınızın bulunduğu klasör adresini yazınız.
    
    Set Klasor = Obj.GetFolder(Dizin)
    For Each Dosya In Klasor.Files
      If InStr(Dosya.Name, ".xls") > 0 Or InStr(Dosya.Name, ".xlsx") > 0 Then
         Set ExD = Workbooks.Open(Dosya.Path)
         For Each ExS In ExD.Sheets
            SonSatir = ExS.Cells(Rows.Count, "I").End(3).Row
            ExS.Range("Y2:Y" & SonSatir).Formula = "=(I2+U2) / (J2+V2)"
         Next
         ExD.Close True
      End If
    Next
End Sub
 
Son düzenleme:
Tüm verilerin 2. satırdan başladığı varsayılmıştır.
Değiştirmek isterseniz, aşağıdaki satırdaki tüm 2 rakamlarını değiştirmelisiniz.

Kod:
ExS.Range("Y2:Y" & SonSatir).Formula = "=(I2+U2) / (J2+V2)"
 
İlginiz ve emeğiniz için çok teşekkür ederim ancak kodu çalıştırdığımda Klasor As Scripting.Folder kısmında hata vermekte. Neyi yanlış yaptım acaba?

Kod:
Sub ToplamaYap()
    Dim Dizin As String
    Dim Obj
    Dim ExD As Workbook
    Dim ExS As Worksheet
    Dim SonSatir As Long
    Dim Klasor As Scripting.Folder, Dosya As Scripting.File
    Set Obj = CreateObject("Scripting.FileSystemObject")
    
    Dizin = "C:\Users\serdar\Desktop\YILLIK-2\1999"
    
    Set Klasor = Obj.GetFolder(Dizin)
    For Each Dosya In Klasor.Files
      If InStr(Dosya.Name, ".xls") > 0 Or InStr(Dosya.Name, ".xlsx") > 0 Then
         Set ExD = Workbooks.Open(Dosya.Path)
         For Each ExS In ExD.Sheets
            SonSatir = ExS.Cells(Rows.Count, "I").End(3).Row
            ExS.Range("Y4:Y" & SonSatir).Formula = "=(I4+U4) / (J4+V4)"
         Next
         ExD.Close True
      End If
    Next
End Sub
 
Son düzenleme:
Bu kodları kopyaladığınız dosyayı açın yukarıdaki menülerden
Tools / Referances seçin, açılan listeden
Microsoft Scripting Runtime bulun yanındaki onay kutusunu işaretleyin. Tamam ı tıklatın
 
Mükemmel çalışıyor. Emeğinize ve ayırdığınız vaktinize çok teşekkür ederim. Son olarak bir konuda daha yardımınıza ihtiyacım var. Yukarıda ki dosyada A ve M sütunlarında > işaretli satırları filitrelemem gerekmekte. Bunu tüm dosyaya uygulamak mümkün müdür?
 
Aşağıdaki kod ile mümkün.

Kod:
Sub ToplamaYap()
    Dim Dizin As String
    Dim Obj As New Scripting.FileSystemObject
    Dim ExD As Workbook
    Dim ExS As Worksheet
    Dim SonSatir As Long
    Dim SonKolon As Long
    Dim Klasor As Scripting.Folder, Dosya As Scripting.File

    Dizin = "C:\Users\serdar\Desktop\YILLIK-2\1999"
    
    Set Klasor = Obj.GetFolder(Dizin)
    For Each Dosya In Klasor.Files
      If InStr(Dosya.Name, ".xls") > 0 Or InStr(Dosya.Name, ".xlsx") > 0 Then
         Set ExD = Workbooks.Open(Dosya.Path)
         For Each ExS In ExD.Sheets
            SonSatir = ExS.Cells(Rows.Count, "I").End(3).Row
            SonKolon = ExS.Cells(2, Columns.Count).End(1).Column
            ExS.Range("Y4:Y" & SonSatir).Formula = "=(I4+U4) / (J4+V4)"
            ExS.Range("A2:" & Cells(SonSatir, SonKolon).Address).AutoFilter Field:=1, Criteria1:="=>", Operator:=xlAnd
            ExS.Range("A2:" & Cells(SonSatir, SonKolon).Address).AutoFilter Field:=13, Criteria1:="=>", Operator:=xlAnd
         Next
         ExD.Close True
      End If
    Next
End Sub
 
Sizi de yordum kusura bakmayın. Çok teşekkür ederim.
 
Excel hata mı veriyor.
Verdiği hatayı da yazsaydınız belki yardımcı olabilirdim.

Şu satırı silerseniz sadece filtreleme yapar

Kod:
ExS.Range("Y4:Y" & SonSatir).Formula = "=(I4+U4) / (J4+V4)"
 
Yok hayır excelde yada kodda her hangi bir sıkıntı yok. Sadece bazı sayfalarda tanımlanan sütuna kadar veri olmadığı için o sayfalarda çalışma duruyordu. O yüzden filtrelemeyi ayrıca uygulamak istedim.Çok teşekkür ederim. Son olarak bazı dosyalarda bu filtrelemeyi A ve örneğin S sütununa uygulamak istediğim de aşağıdaki kodda Field:=13 kısmını değiştirmem yeterli olur mu?

Kod:
ExS.Range("A2:" & Cells(SonSatir, SonKolon).Address).AutoFilter Field:=1, Criteria1:="=>", Operator:=xlAnd
            ExS.Range("A2:" & Cells(SonSatir, SonKolon).Address).AutoFilter Field:=13, Criteria1:="=>", Operator:=xlAnd
 
Evet Field:=13 kısmını değiştirmeniz yeterli.

13 yerine kaç yazarsanız o kolonda filtreleme yapar.
 
Yardımlarınız için teşekkür ederim.
 
Geri
Üst