Kapalı kitaptan kopyala-yapıştır.

Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Merhaba,
Aynı dosya altındaki "SGEL.xlsx" dosyasından " C2:E1000 " de bulunan verileri kopyala,
aktif olan dosyamın C2 hücresine yapıştır.
Not: Kopyalanan verilerden bir kısmı formül

Yardımlarınız için teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Tarifinize göre aşağıdaki kod işinize yarayacaktır.

"SGEL.xlsx" dosyası kapalıyken kodu deneyiniz.

KAPALI dosyada veri alınacak sayfanızın adını SAYFA1 olarak varsaydım. Siz de farklı ise kodu revize edersiniz.

C++:
Option Explicit

Sub Kopyala()
    Dim Yol As String, Dosya As Workbook, S1 As Worksheet
    
    Application.ScreenUpdating = False
    
    Yol = ActiveWorkbook.Path
    
    Set Dosya = Workbooks.Open(Yol & "\SGEL.xlsx")
    Set S1 = Dosya.Sheets("Sayfa1")
    
    Range("C2:E1000").Value = S1.Range("C2:E1000").Value
    
    Dosya.Close 0
    
    Application.ScreenUpdating = True
    
    MsgBox "Veriler aktarılmıştır.", vbInformation
End Sub
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Tarifinize göre aşağıdaki kod işinize yarayacaktır.

"SGEL.xlsx" dosyası kapalıyken kodu deneyiniz.

KAPALI dosyada veri alınacak sayfanızın adını SAYFA1 olarak varsaydım. Siz de farklı ise kodu revize edersiniz.

C++:
Option Explicit

Sub Kopyala()
    Dim Yol As String, Dosya As Workbook, S1 As Worksheet
   
    Application.ScreenUpdating = False
   
    Yol = ActiveWorkbook.Path
   
    Set Dosya = Workbooks.Open(Yol & "\SGEL.xlsx")
    Set S1 = Dosya.Sheets("Sayfa1")
   
    Range("C2:E1000").Value = S1.Range("C2:E1000").Value
   
    Dosya.Close 0
   
    Application.ScreenUpdating = True
   
    MsgBox "Veriler aktarılmıştır.", vbInformation
End Sub
Merhaba,
İlginiz için teşekkür ederim.
Gayet güzel çalıştı ama hiç veri gelmedi. Sayfa1 uyarınızı kodu değil de sayfa adını güncelleyerek denedim.

Ben daha önce kapalı kitabı açıp kopyalayıp tekrar kapatarak alıyordum verileri. Önceki kodların , filanca kitabı aç, kopyala,yapıştır gibi satırları sildim yerine sizin kodlarınız ekledim. Acaba o nedenle mi oldu diye düşündüm ve önceki kodların tamamını pasife aldım ve denedim, olmadı.
Yani tek sizin kodlarınızı denedim, çalışıyor, veri almıyor.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Mantıken verilerin gelmesi gerekir.

Dosya paylaşımı yaparsanız deneme şansımız olacaktır.
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan bey eski üyeyim ama çok şey değişmiş. Gördüğüm kadarıyla altın üye olmadığım için bu ortamda dosya paylaşamayacağım.
Önereceğiniz alternatif dosya yükleyebileceğim site vardır sanıyorum. Yani o konuda da yardım rica ediyorum. Kusura bakmayın lütfen.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki siteleri kullanabilirsiniz.

Google Drive
Yandex
dosya.org
dosya.tc
wetransfer
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan hocam,
"kaybetmezsek bulduk" demezseniz iyidir.
Dosya Google Drive'da,
Makro Gelen dosyasında 2 ayrı makro var. GELENOI olan yapmaya çalıştığım, Makro2 olan kitabı açan.
Teşekkür ediyor, iyi geceler diliyorum.
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan hocam, sorun bende imiş. Kodlarınızı boş bir dosya da çalıştırdım hiçbir sorun yok, muhteşem.
Sizin kodlarınızın altına, önceki makromun devamı olan "son boş satırdan sonrasını sil" satırı ekledim, haliyle tanım eksik olduğu için çalışmadı.
Aşağıdaki kodu nasıl çalışır hale getirebilirim. Selamlar,



Kod:
    SATIR = Cells(Rows.Count, 1).End(xlUp).Row + 1
   
   
    SONSATIR = 10000
    Rows(SATIR & ":" & SONSATIR).Select
    Selection.EntireRow.Delete
   
    Columns("E:E").Select
    Selection.AutoFilter
/CODE]
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu son paylaştığınız kod satırları hangi dosyada işlem yapacak?

Artı neden silme işlemi yapmaya çalışıyorsunuz?
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Sizin yazdığınız kapalı kitaptan veri alan kodların devamı gibi olacak.

Yani, kapalı kitaptan aldığı "C2:E1000" arası olan verilerin her zaman bir kısmı fazla oluyor.
A sütunundaki son dolu satırı kontrol edilecek, bir alt boş satırdan 1000 nci satıra kadar silinecek.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ama biz "A" sütunuyla ilgili hiç bir işlem yapmadık ki.

İşlem "C" sütunundan başlıyor.

Neyse sizin bir bildiğiniz vardır.

C++:
Option Explicit

Sub GELENOI()
    Dim Yol As String, Dosya As Workbook, S1 As Worksheet, Son As Long
    
    Application.ScreenUpdating = False
    
    Yol = ActiveWorkbook.Path
    
    Set Dosya = Workbooks.Open(Yol & "\SGEL.xlsx")
    Set S1 = Dosya.Sheets("KORHAN")
    
    Range("C2:E1000").Value = S1.Range("C2:E1000").Value
    
    Dosya.Close 0
    
    Son = Cells(Rows.Count, 1).End(xlUp).Row + 1
   
    Range("A" & Son & ":A" & Rows.Count).EntireRow.Delete
    
    Application.ScreenUpdating = True
    
    MsgBox "Veriler aktarılmıştır.", vbInformation
End Sub
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Neyse sizin bir bildiğiniz vardır. 'ın cevabı

Korhan hocam, mali müşavirim. Fatura sayısı çok fazla olmayan e-defterlerde böyle bişey ihtiyaç olmamıştı. Bu yıl bütün eczanelere e-defter zorunluluğu getirdiler. Adama her ay 800 küsur fatura kesiyor ilaç firmaları. e-faturaları excel rapor olarak alıyorum, rapora bu macro'yu tanımlıyorum.
Yani A!dan O sütununa kadar veri var, ben C.D.E sütununda gereksiz gördüğüm bilgilerin bozulmasına göz yumarak yazdığınız makroyu çalıştırıyorum. Makroya göre son satır 1001 , gerçek veri diyelim ki 841. İşte o 841 ve sonraki satırları siliyorum.
Çok kullanışlı oldu, teşekkür ederim. Şimdi tek sıkıntım her yeni aldığım rapora bu makroyu yapıştırmak.
Tekrar teşekkür ederim.
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan hocam,
Küçük ama sonucu etkileyen bir sorun var. Alınan verilerin C sütununda olanlar vergi sicil numarası. Malum, Sıfırla başlayan , hatta çift 0 la başlayan sicil numaraları var. Dosyayı aç-kopyala, yapıştır da 0'ları aynen alıyordu. Şimdi almıyor.
1- Hiç mi hiç acil değil,
2- Olmaz birşey ise sizi uğraştırmak istemem.

Selamlar,
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan hocam,
Küçük ama sonucu etkileyen bir sorun var. Alınan verilerin C sütununda olanlar vergi sicil numarası. Malum, Sıfırla başlayan , hatta çift 0 la başlayan sicil numaraları var. Dosyayı aç-kopyala, yapıştır da 0'ları aynen alıyordu. Şimdi almıyor.
1- Hiç mi hiç acil değil,
2- Olmaz birşey ise sizi uğraştırmak istemem.

Selamlar,
Veriyi alacağım kitap hücre formatını değiştirerek denedim, o sorun da düzeldi.
Tekrar teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Önerdiğim kod sonuç verdi demişsiniz. Ama aslında kodda küçük bir hata var. Normalde doğru çalışmaması gerekir. Hata da şu şekilde; kapalı dosyayı açtıktan sonra verileri yine aynı dosyaya yapıştırıyor. Ama siz çalışıyor demişsiniz. Açıkçası anlamadım.

Eski önerdiğim kodları silip siz aşağıdaki kodu deneyiniz.

C++:
Option Explicit

Sub GELENOI()
    Dim K1 As Workbook, S1 As Worksheet, Yol As String
    Dim K2 As Workbook, S2 As Worksheet, Son As Long
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set K1 = ThisWorkbook
    Set S1 = K1.Sheets("Sayfa1")
    Yol = K1.Path
    
    Set K2 = Workbooks.Open(Yol & "\SGEL.xlsx")
    Set S2 = K2.Sheets("KORHAN")
    
    S2.Range("C2:E1000").Copy
    S1.Range("C2").PasteSpecial xlPasteFormats
    S1.Range("C2").PasteSpecial xlPasteValues
    
    K2.Close 0
    
    Son = S1.Cells(S1.Rows.Count, 1).End(xlUp).Row + 1
   
    S1.Range("A" & Son & ":A" & Rows.Count).EntireRow.Delete
    
    Set K1 = Nothing
    Set S1 = Nothing
    Set K2 = Nothing
    Set S2 = Nothing
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "Veriler aktarılmıştır.", vbInformation
End Sub
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan hocam, doprusu bu kadarını beklemiyordum. Çünkü talep etmemiştim. Ne diyeceğimi bilmiyorum, teşekkür ederim.

Şimdi şunu yapmaya çalışacağım, muhtemelen beceremeyeceğim yine başınızı ağrıtacağım. Öncelikle kodu Sayfa1 altında değil Modul altında çalıştıracağım, nedeni şu, Ctrl+ harfle çalıştırmam lazım.
İkincisi sizin bu kodları uyarlayarak, webden indirdiğim raporun A sütunundan O sütununa ve 2.nci satırdan son satıra (son satır değişken) verilerini alacağım. Aslında ilk olarak bu verileri alacağım, ikinci olarak şu anda yaptığınız verileri alacağım.
Bunlardan sonra göz kontrolü ile yapılacak bir aşama ve en sonunda ;
1.nci satırdan 400.ncü satıra kadar kopyala, yeni kitaba kopyala, farklı kaydet YIL(BUGÜN())&" - "&AY(BUGÜN())-1&" - 1".csv
2.nci satırdan 400.ncü satır dahil SATIR SİL
Kayıt olan satırlar bitinceye kadar döndür, ilki " - 1".csv , ikincisi " - 2".csv
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Yapmak istediklerimi hemen başladım. Her iki kitaptan verileri aldım. E sütununda kopyala-yapıştır bir formül vardı, o formülü meğer #YOK olarak kopyalıyormuş, yani formülü kopyalamıyormuş. Bu vesile ile onu tespit ettim.
Düşündüğüm gibi, yardımına hala ihtiyacım var hocam
Selamlar,
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
" #YOK olarak kopyalıyormuş, yani formülü kopyalamıyormuş " sorununu, kitap içinde formül ile çözdüm.

Kod:
Range("E2").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R2C3:R1000C8,MATCH(RC[3],R2C3:R1000C3,0),2)"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E1000"), Type:=xlFillDefault
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Korhan Hocam merhaba,
Uğraşmadım desem yalan olur ama çok uzak kaldım, yazdıklarınızı anlayamıyorum bile Ya da anlayabilmek için oturup çalışıyorum, o zaman anlıyorum. Yazdığınız makroyu ancak, ikinci bir kitaptan veri almaya adapte edebildim. Sona yaklaştım, yardımınıza gerek var.
Kesinlikle hiç mi hiç acelesi yok.
Excel'in "makro kaydet" modülü ile bişeyler yapmaya çalıştım, tabii ki olmadı. Module 2 de görebilirsiniz.
Yapmak istediğim
MAKRO GELEN.xlsm dosyasına üçüncü bir makro.
1.nci satırdan 400.ncü satıra kadar kopyala, yeni kitaba kopyala, ve "farklı kaydet" YIL(BUGÜN())&" - "&AY(BUGÜN())-1&" - 1".csv
2.nci satırdan 400.ncü satır dahil SATIR SİL, (1.nci satırda sütun başlıkları var)
Yine , 1.nci satırdan 400.ncü satıra kadar kopyala, yeni kitaba kopyala, ve "farklı kaydet" YIL(BUGÜN())&" - "&AY(BUGÜN())-1&" - 2".csv

Kayıt olan satırlar bitinceye kadar döndür, ilki " - 1".csv , ikincisi " - 2".csv üçüncüsü ...

Sanıyorum, her defasında 400 satırdan büyük olup olmadığı sorgulacak ve döngü sonlandırılacak.
Çalıştığım dosya Google Drive'de

Dosya Linki

Teşekkür ederim.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,274
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Forumda bolca csv yapma kodları var. Arama yaparsanız ulaşabilirsiniz.


Bunlar yetersiz gelirse;

 
Üst