Bir sayfadan diğerine veri aktarma

Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
Günaydınlar,
Sayfa1 de A sütünunda ürün adı mevcut 2. satır B sütunundan başlayarak 2. satır Y sütununa kadar tamamında yan yana sıralı bir şekilde de tarihler mevcut 3.satırın B sütunundan 92. satırın Y sütununa kadar da satış adetleri mevcut bulunmakta. Ben bu yan yana olan veri şeklini sayfa2 ye A sütununda ürün adı B sütununda Adet sayısı ve C sütununda ise tarih verisini yazdırmak istiyorum. Mesela önce 20.07.2022 tarihine ait adet verileri yazdıktan sonra aynı şekilde altına tekrar aynı ürün adlarını tekrardan yazarak bu sefer 21.07.2022 olacak şekilde yazılacak.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bir örnek dosya olsa da biz bahsettiğiniz dosya yapısını oluşturmak için uğraşmasak hoş olmaz mı?
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
Bir örnek dosya olsa da biz bahsettiğiniz dosya yapısını oluşturmak için uğraşmasak hoş olmaz mı?

şunu söyler misiniz:

Worksheets(2).Cells(3, 2).Value = Worksheets(1).Celss(3, 1).Value

bu kod 1. sayfanın 3 satır 1. sütunundaki veriyi 2. sayfanın 3. satır 2. sütununa taşımaz mı ben mi yanlış yapıyorum ?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Worksheets(2).Cells(3, 2).Value = Worksheets(1).Cells(3, 1).Value

Celss yerine Cells kullanırsanız, dediğiniz işlemi yapar.
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
Bir önceki mesajımda belirttiğim düzeltmeyi yapmazsanız hata vermesi çok normal. ;)
yaptım çalıştı teşekkür ederim. Şuan başka bir sorun var o da şöyle ki 1. sayfada A hücresinde 90 adet veri var ben bunu 2. sayfada A hücresine 5 kere arka arkaya yazdırmak istiyorum bunun için iç içe for kullanmaya çalışıyorum ama beceremedim yardımcı olursanız sevinirim .
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
En başta yapmak istediğiniz işlemi aşağıdaki makroyla yapabilirsiniz. Verileriniz çok olduğundan bilgisayarınızın durumuna göre işlem uzun sürebilir: (#8 nolu mesajınızdaki işlem ilk isteğinizden farklı mı?)

PHP:
Sub veri()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Cells(Rows.Count, "A").End(3).Row
Application.ScreenUpdating = False
    For i = 3 To son
        yeni = s2.Cells(Rows.Count, "B").End(3).Row + 1
        s1.[B2:Y2].Copy: s2.Cells(yeni, "D").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True
        s1.Cells(i, "A").Copy s2.Range(s2.Cells(yeni, "B"), s2.Cells(yeni + 23, "B"))
        s1.Range("B" & i & ":Y" & i).Copy: s2.Cells(yeni, "C").PasteSpecial Paste:=xlPasteAll, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next
    Application.CutCopyMode = False
Application.ScreenUpdating = True
s2.Activate
MsgBox "İşlem Tamamlandı"

End Sub
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
En başta yapmak istediğiniz işlemi aşağıdaki makroyla yapabilirsiniz. Verileriniz çok olduğundan bilgisayarınızın durumuna göre işlem uzun sürebilir: (#8 nolu mesajınızdaki işlem ilk isteğinizden farklı mı?)

PHP:
Sub veri()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Cells(Rows.Count, "A").End(3).Row
Application.ScreenUpdating = False
    For i = 3 To son
        yeni = s2.Cells(Rows.Count, "B").End(3).Row + 1
        s1.[B2:Y2].Copy: s2.Cells(yeni, "D").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True
        s1.Cells(i, "A").Copy s2.Range(s2.Cells(yeni, "B"), s2.Cells(yeni + 23, "B"))
        s1.Range("B" & i & ":Y" & i).Copy: s2.Cells(yeni, "C").PasteSpecial Paste:=xlPasteAll, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next
    Application.CutCopyMode = False
Application.ScreenUpdating = True
s2.Activate
MsgBox "İşlem Tamamlandı"

End Sub

yazdığınız kod için teşekkürler ancak istediğim bu değil yani tam olarak bu değil sizin yazdığınız kodda ürün adı sabit kalıp tarih alt alta değişiklik gösteriyor benim istediğimde ise tarih tarafı sabit kalıcak ürünler değişiklik gösterecek yani en üstte aynı tarihte olanlar olucak
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
İşlem tamamlandıktan sonra tarih sütununa göre sıralama yapabilirsiniz.
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
İşlem tamamlandıktan sonra tarih sütununa göre sıralama yapabilirsiniz.
şuan fark ettim de sizin kodunuzdaki tarihle benim verilerimdeki tarih aynı değil ? yani sizde tarihler hep artmış sayfa 1 deki tarihleri çekmemiş anlamadım ? 2062 yılı yazıyor en son ?92 adet veri var bu verilerin tarihlerini doğru yazmış hatta 93. verinin de tarihini yazmış ancak sonra saçmalamış ve yılları arttırarak yazmaya başlamış kodu kontol eder misiniz ? teşekkürler Ayrıca 92 adet veri 24 adet taih var yani yeni sayfada 2208 adet veri olması gerekmektedir.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayfa1'in 2. satırındaki tarihlerde formül kullandığınız için öyle olmuş, formül olduğuna dikkat etmemiştim.

Aşağıdaki makro verileri aktarmakta ve sonra da tarih sırasına göre sıralamaktadır. #8 nolu mesajınızdaki isteğiniz farklıysa dosyanızı ona göre güncelleyip paylaşmanız iyi olur (Şu halden şu hale dönüşmesini istiyorum gibi):

PHP:
Sub veri()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Cells(Rows.Count, "A").End(3).Row
Application.ScreenUpdating = False
    For i = 3 To son
        yeni = s2.Cells(Rows.Count, "B").End(3).Row + 1
        s1.[B2:Y2].Copy: s2.Cells(yeni, "D").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True
        s1.Cells(i, "A").Copy s2.Range(s2.Cells(yeni, "B"), s2.Cells(yeni + 23, "B"))
        s1.Range("B" & i & ":Y" & i).Copy: s2.Cells(yeni, "C").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next
    Application.CutCopyMode = False
    enson = s2.Cells(Rows.Count, "B").End(3).Row
    s2.Sort.SortFields.Clear
    s2.Sort.SortFields.Add Key:=Range("D5:D" & enson) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With s2.Sort
        .SetRange Range("B3:D" & enson)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Application.ScreenUpdating = True
s2.Activate
MsgBox "İşlem Tamamlandı"

End Sub
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
Sayfa1'in 2. satırındaki tarihlerde formül kullandığınız için öyle olmuş, formül olduğuna dikkat etmemiştim.

Aşağıdaki makro verileri aktarmakta ve sonra da tarih sırasına göre sıralamaktadır. #8 nolu mesajınızdaki isteğiniz farklıysa dosyanızı ona göre güncelleyip paylaşmanız iyi olur (Şu halden şu hale dönüşmesini istiyorum gibi):

PHP:
Sub veri()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Cells(Rows.Count, "A").End(3).Row
Application.ScreenUpdating = False
    For i = 3 To son
        yeni = s2.Cells(Rows.Count, "B").End(3).Row + 1
        s1.[B2:Y2].Copy: s2.Cells(yeni, "D").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True
        s1.Cells(i, "A").Copy s2.Range(s2.Cells(yeni, "B"), s2.Cells(yeni + 23, "B"))
        s1.Range("B" & i & ":Y" & i).Copy: s2.Cells(yeni, "C").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Next
    Application.CutCopyMode = False
    enson = s2.Cells(Rows.Count, "B").End(3).Row
    s2.Sort.SortFields.Clear
    s2.Sort.SortFields.Add Key:=Range("D5:D" & enson) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With s2.Sort
        .SetRange Range("B3:D" & enson)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Application.ScreenUpdating = True
s2.Activate
MsgBox "İşlem Tamamlandı"

End Sub

yine aynı şekilde hatalı çalışıyor . tarih formüllerini sileyim mi o şekilde mi çalışır?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Değer yapıştırma özelliğini tutarlar için yapmışım, tarihler için yapmayı unutmuşum. Aşağıdaki gibi deneyin:

PHP:
Sub veri()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Cells(Rows.Count, "A").End(3).Row
Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        For i = 3 To son
            yeni = s2.Cells(Rows.Count, "B").End(3).Row + 1
            s1.[B2:Y2].Copy: s2.Cells(yeni, "D").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
            s1.Cells(i, "A").Copy s2.Range(s2.Cells(yeni, "B"), s2.Cells(yeni + 23, "B"))
            s1.Range("B" & i & ":Y" & i).Copy: s2.Cells(yeni, "C").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Next
        Application.CutCopyMode = False
        enson = s2.Cells(Rows.Count, "B").End(3).Row
        s2.Sort.SortFields.Clear
        s2.Sort.SortFields.Add Key:=Range("D5:D" & enson) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With s2.Sort
            .SetRange Range("B3:D" & enson)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
s2.Activate
MsgBox "İşlem Tamamlandı"

End Sub
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
Değer yapıştırma özelliğini tutarlar için yapmışım, tarihler için yapmayı unutmuşum. Aşağıdaki gibi deneyin:

PHP:
Sub veri()
Set s1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
son = s1.Cells(Rows.Count, "A").End(3).Row
Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        For i = 3 To son
            yeni = s2.Cells(Rows.Count, "B").End(3).Row + 1
            s1.[B2:Y2].Copy: s2.Cells(yeni, "D").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
            s1.Cells(i, "A").Copy s2.Range(s2.Cells(yeni, "B"), s2.Cells(yeni + 23, "B"))
            s1.Range("B" & i & ":Y" & i).Copy: s2.Cells(yeni, "C").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Next
        Application.CutCopyMode = False
        enson = s2.Cells(Rows.Count, "B").End(3).Row
        s2.Sort.SortFields.Clear
        s2.Sort.SortFields.Add Key:=Range("D5:D" & enson) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With s2.Sort
            .SetRange Range("B3:D" & enson)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
s2.Activate
MsgBox "İşlem Tamamlandı"

End Sub

Teşekkür ederim kod sorunsuz çalıştı. Sormak istediğim bu yazmış olduğunuz kod dilini bu kadar detaylı nasıl öğrenebilirim acaba ? VBA dilini biliyorum sanıyordum kendimi yani okulda öğrendim sanıyordum ama sadece başlangıç seviyesi kadar biliyorum galiba. Bu dil konusunda bana yardımcı olabilir misiniz ?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Ben ne öğrendiysem öncelikle bu sitedeki sorulara verilen cevaplardan, sonra da sorulan sorulara cevap verebilmek için yaptığım araştırmalardan öğrendim. Biraz gayret ve ilgiyle siz de yapabilirsiniz. İşin algoritmasını/mantığını kurduktan sonra hangi kod yapısının kullanılacağını ezbere bilmesem de araştırarak öğrenebiliyorum.
 
Katılım
6 Temmuz 2022
Mesajlar
50
Excel Vers. ve Dili
2019
Ben ne öğrendiysem öncelikle bu sitedeki sorulara verilen cevaplardan, sonra da sorulan sorulara cevap verebilmek için yaptığım araştırmalardan öğrendim. Biraz gayret ve ilgiyle siz de yapabilirsiniz. İşin algoritmasını/mantığını kurduktan sonra hangi kod yapısının kullanılacağını ezbere bilmesem de araştırarak öğrenebiliyorum.

mesela yazmış olduğunuz kod da 2 ve 3. satırlar da sayfaları s1 ve s2 ye atıyorsunuz ki kodun alt bölümlerinde tek tek sayfa isimleriyle sheetslerle uğraşmamak için galiba diye düşünüyorum peki 4. satır ne iş yapıyor anlatır mısınız müsaitseniz?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
son ile başlayan satır, sütundaki son dolu hücrenin kaçıncı satır olduğunu bulmak için kullanılıyor.

son = s1.Cells(Rows.Count, "A").End(3).Row

s1'in tanımlanan sayfa olduğunu biliyorsunuz.

Cells ifadesi hücreler için kullanılır, parantez içinde hücrenin adresi belirtilir.

Parantez içindeki ilk ifade satır numarasını, ikinci ifade ise sütun numarasını gösterir.

Rows.count ifadesi Satır sayısını ifade eder ve sayfadaki mevcut tüm satırların kaç tane olduğunu belirtir.

"A" ifadesinin A sütunu olduğunu anlamışsınızdır.

s1.Cells(Rows.Count, "A") ifadesi s1olarak tanımlanan sayfadaki A sütunundaki son hücre anlamına gelmektedir ve sizin dosyanızda A1048576 hücresidir.

End(3) ifadesi belirtilen hücredeyken CTRL+Üst ok tuşu kombinasyonuna basıldığında yapılan işlemi yapar ve bulunulan yerin üstündeki en yakın dolu hücreye gitmemizi sağlar. End(XlUp) da aynı işlemi yapar.

.Row ifadesinin satır anlamına geldiğini anlamışsınızdır.

Bu kod tümüyle değerlendirildiğinde A sütunundaki son dolu hücrenin satır numarasını bulmamızı sağlıyor.
 
Üst