Soru Adresini Gösterdiğim Excelden belirli sütunlarındaki verileri Makrodaki sayfaya çektirme

Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
Merhabalar;

Makro tuşuna bastığımda gösterdiğim yerdeki (masa üstü new klasörü ya da farklı bir alanda da olabilir) Exceli açıp B,C,E,H,I,J,BT,CE sütunlarındaki verileri Makromda bulunana Sayfa1 sekmesine çektirmek istiyorum mümkün müdür?

Çok teşekkür ederim
 
Katılım
21 Ağustos 2005
Mesajlar
625
Excel Vers. ve Dili
Office 365 - İngilizce
Makronuzun bulunduğu çalışma kitabındaki sayfanın aynı sütunlarına mı kaydetmek istiyorsunuz_
 
Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
Merhaba @mesuttasar bey ; Hayır A sütunundan başlayarak sütunları yana yana koplamak istiyorum; Yolunu gösterdiğim excelde çokfazla sütun var ve bana gerekli olan sütunlar sadece (B,C,E,H,I,J,BT,CE ) sütunları ben bu sütunlardaki tüm hücreleri makromun olduğu excelede bulunan sayfa1 sekmesine A sütunundan başlayarak kopyalamak isityorum.
 
Katılım
21 Ağustos 2005
Mesajlar
625
Excel Vers. ve Dili
Office 365 - İngilizce
Kolonları koyalanacak çalışma kitabının sayfa isminin de Sayfa1 olması durumunda aşağıdaki kodları kullanabilirsiniz.

Kod:
sub verigetir()
Dim kaynakkitap As Workbook
Dim kaynaksayfa As Worksheet
Dim bukitap As Workbook
Dim hedefsayfa As Worksheet
Dim kolon As Variant
Dim s As Variant
dim i as long

Dim fileDialog As fileDialog
    Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
    With fileDialog
        .AllowMultiSelect = False
        .Title = "Kaynak Dosya Seç"
        .Filters.Clear
        .Filters.Add "Excel Dosyaları", "*.xls; *.xlsx; *.xlsm", 1
        If .Show = -1 Then ' Kullanıcı "Aç" butonuna bastıysa
            sourceFilePath = .SelectedItems(1)
        Else
            MsgBox "Dosya seçimi iptal edildi.", vbExclamation
            Exit Sub
        End If
    End With


    Set kaynakkitap = Application.Workbooks.Open(sourceFilePath)
    Set kaynaksayfa = kaynakkitap.Sheets("Sayfa1")
    Set bukitap = ThisWorkbook
    Set hedefsayfa = ThisWorkbook.Sheets("Sayfa1")

    kolon = Array("B", "C", "E", "H", "I", "J", "BT", "CE")
    i=1
        For Each s In kolon
            kaynaksayfa.Columns(s).Copy Destination:=hedefsayfa.Columns(i)
        i=i+1
        Next s
kaynakkitap.Close SaveChanges:=False

MsgBox "Veriler kopyalandı!"
end sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Veri aktarımı sırasında BİÇİMLENDİRMELER önemli değilse ADO ile hedef dosyayı açmadan işlem yapabilirsiniz..
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
@mesuttasar,

Aslında gözde büyütüldüğü kadar zor değil. Bende önceleri hiç bulaşmak istememiştim.

ADO için bağlantı açma-kapama satırları sabit zaten. Sizi zorlayacak asıl iş ise sorgu satırının kurgularıdır. Ben bile halâ kendimi geliştirmek için sürekli araştırıyorum. Hele ki yapay zeka çıktı bazı işler daha da kolaylaştı.

Bence ufak ufak en basit haliyle forumdaki kodları inceleyerek başlayabilirsiniz. Eliniz alışınca ne kadar kolaşmış diyeceğinize eminim.

Hatta aşağıdaki linkte Erdem beyin videolu anlatımları bulunuyor. Size oldukça faydası olacaktır.

 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Örnek olması açısından ADO kodlarını paylaşıyorum.

C++:
Option Explicit

Sub Import_Data()
    Dim Process_Time As Double, My_Connection As Object, My_File As Variant, My_Recordset As Object
    
    Range("A:H").ClearContents
    
    My_File = Application.GetOpenFilename(FileFilter:="Excel Dosyaları (*.xls*), *.xls*", Title:="Lütfen bir dosya seçiniz...")

    If My_File = False Then
        MsgBox "Dosya seçimi yapmadığınız için işleminiz iptal edilmiştir.", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Process_Time = Timer

    Set My_Connection = CreateObject("AdoDb.Connection")

    Select Case Val(Application.Version)
        Case Is < 12
            My_Connection.Open "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & My_File & ";Extended Properties=""Excel 8.0;HDR=No"""
        Case Is > 11
            My_Connection.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & My_File & ";Extended Properties=""Excel 12.0 Xml;Hdr=No"""
    End Select

    Set My_Recordset = My_Connection.Execute("Select F2,F3,F5,F8,F9,F10,F72,F83 From [Sheet1$]")
    Range("A1").CopyFromRecordset My_Recordset
  
    My_Recordset.Close
    My_Connection.Close

    Set My_Recordset = Nothing
    Set My_Connection = Nothing

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

    MsgBox "Veriler aktarılmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Process_Time, "0.00") & " Saniye"
End Sub
 
Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
@mesuttasar , @Korhan Ayhan bey çok teşekkür ederim, yukarıdaki işlemi bir adım ilerletmek istiyorum şöyle ki; gösterdiğim klasörde 7 aylık 7 adet excel verisini alt alta tek excel’de birleştirmek istiyorum ama; bazı aylarda dosya içerikleri aynı olmasına rağmen, girişi yapan arkadaş Sütun başlığı hücre yerini farklı hücrede başlatmış (Ocak ayında D1 Hücresinde Olan “Ardiye” Satır başlığı Mart Ayında K1 Hücresinde yazmış bu sebeple alt alta verileri kopyalasam sütün başlığı eşleşmediği için işlemi uygulayamıyorum destek olabilir misiniz
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu şekilde olan 2 dosya paylaşırsanız destek olabiliriz..
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sadece sarı renkli alanlar mı aktarılacak?

Ayrıca paylaştığınız dosyalarda sütun başlıklarıda farklı görünüyor. Bu durumda bildiğim kadarıyla ADO kullanımı devre dışı kalacaktır.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosyalarda sütunların farklı yerde olması önemli değil fakat başlık isimleri aynı değilse benim önerdiğim yöntemi kullanamayız.
 
Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
Başlık isimleri aynı aslında değişik olan varsa ben elle başlık ismini değiştririm
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,245
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İlk gözüme çarpan... AÇIKLAMA
 
Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
manuel değiştirebilirm hepsini Açıklama olarak
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Yeni bir Excel dosyası açın ve verilerin alınacağı Excel dosyalarının olduğu klasöre yerleştirin ve aşağıdaki kodu yeni Excel dosyasında çalıştırın...

Benzer şekilde diğer dosyaları ve tablolardaki alanları ilave edebilirsiniz....


C#:
Sub Test()
    'Haluk 29/08/2023
    Dim WB1 As String, WB2 As String, WB3 As String
    Dim strConnection As String
    Dim strQuery As String
    Dim objConnection As Object
    Dim RS As Object
   
    WB1 = ThisWorkbook.Path & Application.PathSeparator & "ocak.xlsx"
    WB2 = ThisWorkbook.Path & Application.PathSeparator & "şubat.xlsx"
    WB3 = ThisWorkbook.Path & Application.PathSeparator & "temmuz.xlsx"
   
    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & ThisWorkbook.FullName & "';" & _
        "Mode=Read;" & _
        "Extended Properties=""Excel 12.0 Macro;"";"

    strQuery = _
        "Select [Ay], [Referans], [Link], [Mücbir], [TescilNo], [TescilTarihi] from [Export$] " & _
        "in '" & WB1 & "' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=Yes;'] " & _
        "union all " & _
        "select [Ay], [Referans], [Link], [Mücbir], [TescilNo], [TescilTarihi]  from [Export$] " & _
        "in '" & WB2 & "' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=Yes;'] " & _
        "union all " & _
        "select [Ay], [Referans], [Link], [Mücbir], [TescilNo], [TescilTarihi] from [Export$] " & _
        "in '" & WB3 & "' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=Yes;']"

    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open strConnection
   
    Set RS = objConnection.Execute(strQuery)
   
    For j = 0 To RS.Fields.Count - 1
        Cells(1, j + 1) = RS.Fields(j).Name
    Next
   
    Range("A2").CopyFromRecordset RS
   
    objConnection.Close
    Set objRecordSet = Nothing
    Set objConnection = Nothing
End Sub

.
 
Katılım
13 Ekim 2022
Mesajlar
40
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
31-10-2023
Merhaba Haluk Bey; aşağıdaki hatayı aldım ama246252
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Kodda belirtilen tum dosyalrin oldugundan ve sayfa isimlerinin "Export" oldugundan emin olun...

.
 
Üst