Bir sütundaki verileri başka sütuna taşıma

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Merhaba,

A Sütununda değişken olan verileri B Sütununa kalıcı olarak taşımak ile (bir nevi kopyala-yapıştır) makroya ihtiyacım var. Yardımlarınız lütfen !...

Ek bilgi: A sütununda A1:A10, A15:A20 gibi aralıklarda bulunan veriler, B sütununda aynı satırlara yada ardışık satırlara taşınmalıdır.

Teşekkür ederim.
 

Ekli dosyalar

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
İsteğinizin, "A sütununu Kopyala=> B sütununa yapıştır"dan farkı nedir?
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
İsteğinizin, "A sütununu Kopyala=> B sütununa yapıştır"dan farkı nedir?
Yusuf bey,

İlk görünüşte algıladığınız gibi görünse de, çok kompleks içeriği olan Ön Muhasebe Programımda, Kilitli olmayan ve değişik alanlarda veriler bulunan hücrelerden topluca veri almaya, ve aynı düzende hazırlanmış (Satır-Sütun) başka bir yere (yada sayfaya) tek komutla yapıştırmaya yönelik bir ihtiyaçtan kaynaklanmaktadır.

Algıladığınız biçimde çözmenin oluşturduğu olumsuz ekran görüntüsü ektedir.

Bunun orjinal halinden örnek vermek ve anlatmak, mümkün değildir, basitçe hazırladığım örneğe verilecek cevabınızı ben gerektiği şekilde, programıma adapte ederim diye düşünüyorum.

Teşekkür ederim.Ekran Alıntısı.PNG
 

Ekli dosyalar

  • 117.2 KB Görüntüleme: 22
  • 106.5 KB Görüntüleme: 21
Son düzenleme:

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
Sadece veri olan hücreleri aralarında boşluk bırakmadan başka bir yere mi aktarmak istiyorsunuz? Ya da o boş görünen yerler aslında dolu mu? Dolu ise asıl kopyalamak istediğiniz/taşımak istediğiniz verileri o verilerden/hücrelerden ayıran özellik nedir? Kısacası sayfadaki hangi hücrelerin nereye kopyalanacağını nasıl belirliyorsunuz? Soruyu daha iyi anlayabilmek için gerçek dosyanızla aynı yapıda olan bir örnek dosya hazırlayıp paylaşmanız iyi olur.
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Yusuf bey,

Bu soruyu sorarken, bir yerdeki verileri KOPYALA, diğer yere YAPIŞTIR kadar kolay bir soru sormayacağımı tahmin edersiniz diye düşünerek, ihtiyacımı bir kaç cümle ve ekran görüntüsü ile izah etmeye çalıştım. Konuyu biraz daha açmaya çalışayım;

Excel'in kendi tabiriyle, "Çoklu Alan Seçimi" >>> "KOPYALA" >>> "YAPIŞTIR" işlevi yapılmak istendiğinde, sistemde "Bu eylem çoklu seçimlerde çalışmaz" uyarı penceresi ile karşılaşılmaktadır. Şimdi bunu kendi isteğimle somutlaştırayım.

ÖRNEK A1:A10 aralığı (boş yada dolu farketmez) ile A20:A30 aralığı (boş yada dolu farketmez) ayrı ayrı seçilerek, B1:B10 ve B20:B30 hücrelerine TEK KOMUTLA yapıştırılacak.

Çünkü, A11:A19 aralığındaki diğer verilerin Kopyalanmaması sadece bunun üzerindeki A1:A10 ile bunun altındaki A20:A30 aralığındaki verilerin TEK Komutla alınarak, B Sütunundaki aynı yerlere kopya olarak taşınması ihtiyacıdır.

Umarım, bu kez izah edebilmişimdir. Fayda sağlaması amacıyla örnek Excel Sayfasını da görsel olarak ekte gönderiyorum.
 

Ekli dosyalar

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
Her ne kadar tahmin etsek de tam olarak ne istediğinizi de anlamıyoruz, çünkü telepati yapamıyoruz maalesef. Size bir önceki mesajımda "kopyalamak istediğiniz/taşımak istediğiniz verileri o verilerden/hücrelerden ayıran özellik nedir? Kısacası sayfadaki hangi hücrelerin nereye kopyalanacağını nasıl belirliyorsunuz? " diye sormamın sebebi de buydu. Sayfada hangi hücrenin kopyalanacağını belirten bir kural yoksa çözüm de bulunamaz doğal olarak.
Şimdi son mesajınızdan "kilitli olmayan" hücrelerin kopyalanmasını istediğinizi anlıyorum. Aşağıdaki kodları bir modüle kopyalayıp denerseniz, sayfada A sütunundaki son dolu hücreye kadar, hücre özelliklerinden koruma sekmesinde "Kilitli" seçeneği seçili olmayan hücrelerin, B sütununa kopyalandığını görebilirsiniz:



Kod:
Sub taşı()
For i = 1 To Cells(Rows.Count, "A").End(3).Row
    If Cells(i, "A").Locked = False Then
        Cells(i, "B") = Cells(i, "A")
    End If
Next
End Sub
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Kod:
Sub taşı()
For i = 1 To Cells(Rows.Count, "A").End(3).Row
    If Cells(i, "A").Locked = False Then
        Cells(i, "B") = Cells(i, "A")
    End If
Next
End Sub
[/QUOTE]


Yusuf bey,

İlginiz, uğraşınız ve Kodlamanız için teşekkür ederim. Yukarıdaki Kodlamanızda, "Locked=False", komutu, "Locked=True" yapıldığında kodlama çalıştı.

Lakin önceki talep yazımda;

Çünkü, A11:A19 aralığındaki diğer verilerin Kopyalanmaması sadece bunun üzerindeki A1:A10 ile bunun altındaki A20:A30 aralığındaki verilerin TEK Komutla alınarak, B Sütunundaki aynı yerlere kopya olarak taşınması ihtiyacıdır.

Örnek Tablo içindeki açıklamada;

GRİ ALAN "KİLİTLİ" ve "SAYFA KORUMALI" dır. YANİ SEÇİLEMEZ-KOPYALANAMAZ-YAPIŞTIRILAMAZ DURUMDADIR.
AYRICA GRİ ALANDAKİ VERİLERİN DE TAŞINMAMASI GEREKMEKTEDİR


olan bölümleri sanırım gözden kaçırdınız. A11:A19 hücrelerini pas geçmesi lazımdı. Kodlamanızı buna göre düzenleyebilir misiniz ?

Ayrıca, bu uygulamayı her iki sütunun da KİLİTLİ ve SAYFA KORUMALI olduğu Hücrelerin Kopyalanması için de mümkün ise rica edebilir miyim?.

Verdiğim zahmet için teşekkür ederim.
 
Son düzenleme:

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
Örnek dosyanızla isteğiniz uyuşmuyor maalesef. Verdiğim kod tam olarak istediğiniz gibi kilitli olmayan hücreleri aktarıyor. Ancak örnek dosyanızda tüm hücreler "kilitli" olarak seçiliydi. Ben istediğinizi yapmak için öncelikle aktarılacak hücrelerin "kilitli" özelliğini iptal ettim. Kod düzgün bir şekilde çalıştı. Hatta aktarılmaması gereken hücreye de veri girdim, kod o veriyi aktarmadı.

Siz sanıyorum örnek dosyanızda bu şekilde kilitli özelliğini iptal etmeden kodu kullandınız. Bu nedenle tüm hücreler kilitli olduğu için herhangi bir aktarım olmamıştır ve siz de kodu değiştirip "kilitli olanları aktaracak" şekle getirince, aslında aktarmak istemediğiniz yeri de aktarmış oldunuz.

Sonuç olarak verdiğim kod, hücre özelliği kilitli olan hiçbir hücreyi aktarmamaktadır.

Kilitli olanları aktarmak için nasıl yapılacağını da tecrübe etmiş oldunuz böylece. Kilitsizler için "False" kilitliler için ise "True" olarak kullanmanız gerekiyor. Tabi hücre özelliğini de buna uygun düzenlemek kaydıyla.
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Yusuf bey,

Madem başladık, bu işi çözelim. Konuşmak ve işaret etmek başka birşey, yazmak ve anlatmaya çalışmak başka birşey. Bazen mimik bile birşeyler anlatabilirken, yazıda duygu olmadığı için anlatmak ve anlaşılmak zor olabiliyor.

Dolayısıyle, ÖRNEK Dosyamı ihtiyacım olan maddeler halinde yeniden düzenleyerek Koşullar oluşturdum. Bu koşullara uygun olacak (çalıştığı da tarafınızca test edilmiş) KOD'lamayı VBA Sayfasına yazmanızı rica etsem, çok şey mi istemiş olurum. Hoşgörünüzü bekliyorum.

Teşekkür ederim.
 

Ekli dosyalar

Korhan Ayhan

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

Kod:
Sub KOPYALA()
    Dim Veri As Range
    For Each Veri In Range("A1:A10,A20:A29")
        Veri.Copy Veri.Offset(0, 1)
    Next

    MsgBox "Veriler kopyalanmıştır."
End Sub
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Korhan bey'cim,

Anlayışınıza, zekanıza, emeğinize, ilginize zeval gelmesin. Çok ama çok teşekkür ederim.

Sadece öğrenmek amaçlı soru sormak isterim. Kodlamanızda, komut B sütununa nasıl yapıştırıyor. B sütunu nerede işaret ediliyor ? Örneğin ben bu Kodlama yönünü B sütunundan A sütununa nasıl yapabilirim ?
 

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
Eğer isteğiniz A1:A10 ve A20:A29 hücrelerinin B sütununa aktarılmasıysa sayın Korhan Bey'in verdiği kodlar bu işlemi yapıyor. Eğer kopyalarken B sütununun biçiminin değişememesini, sadece değerlerin aktarılmasını istiyorsanız kodu şu şekilde kullanabilirsiniz:

Kod:
Sub KOPYALA()
    Dim Veri As Range
    For Each Veri In Range("A1:A10,A20:A29")
       Veri.Copy: Veri.Offset(0, 1).PasteSpecial Paste:=xlPasteValues
    Next

    MsgBox "Veriler kopyalanmıştır."
End Sub
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Yusuf bey,

Emekleriniz ve yardımlarınız için teşekkür ederim.
 

Korhan Ayhan

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

Döngüdeki Range("A1:A10,A20:A29") bölümü kopyalanacak hücreleri ifade etmektedir.

Kod içindeki Veri.Offset(0, 1) bölümü ise "B" sütununa yapıştır anlamını taşımaktadır.

Kodu özetlersek;

Veri "A" sütunundadır. 1 sütun öteleyerek yapıştır anlamındadır.

Eğer "B" sütunundaki verileri "A" sütununa yapıştırmak isterseniz aşağıdaki kodu deneyebilirsiniz.

Kod:
Sub KOPYALA()
    Dim Veri As Range
    For Each Veri In Range("B1:B10,B20:B29")
        Veri.Copy Veri.Offset(0, -1)
    Next

    MsgBox "Veriler kopyalanmıştır."
End Sub
 

ERMAN SAYINALP

Altın Üye
Katılım
11 Eylül 2008
Mesajlar
173
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
08-09-2027
Korhan bey'cim

Tekrar teşekkür ederim. Sizden çok defa yardım aldım, esirgemediğiniz bilgi paylaşımlarınız için müteşekkirim. Bu bağlamda ve sizin nezdinizde, bir ricam olacak. Şöyle ki;

Son görüşmemizde, istediğim küçük açıklama gibi, siz Moderatör ve Üstadlar, biz daha az bilen amatör kullanıcılar için verdiğiniz yanıtlarda, küçük küçük ve mantığını açıklayıcı dip notlar ilave edebilirseniz, sanırım özdeyişte anlatıldığı gibi "balık tutmayı öğretmiş" olursunuz. Oysa bugünkü haliyle bizler, yeniden acıkınca Balık istemeye devam ederiz. Dolayısyle, kodlama içindeki (ör: 0, 1, i, vs) değişkenlerin oynanmasıyla neleri değiştirebileceğimizi daha iyi anlar ve sizlere daha az ve gerekli sorular sormuş oluruz. Zira, maalesef bu mecralarda, anlatılamayan, anlaşılmayan bir dolu yazıları okumaya devam ederiz.

Saygılarımla,
 
Katılım
21 Aralık 2016
Mesajlar
24
Excel Vers. ve Dili
2015
Altın Üyelik Bitiş Tarihi
27/12/2021
Deneyiniz.

Kod:
Sub KOPYALA()
    Dim Veri As Range
    For Each Veri In Range("A1:A10,A20:A29")
        Veri.Copy Veri.Offset(0, 1)
    Next

    MsgBox "Veriler kopyalanmıştır."
End Sub
Deneyiniz.

Kod:
Sub KOPYALA()
    Dim Veri As Range
    For Each Veri In Range("A1:A10,A20:A29")
        Veri.Copy Veri.Offset(0, 1)
    Next

    MsgBox "Veriler kopyalanmıştır."
End Sub
Merhaba,

Döngüdeki Range("A1:A10,A20:A29") bölümü kopyalanacak hücreleri ifade etmektedir.

Kod içindeki Veri.Offset(0, 1) bölümü ise "B" sütununa yapıştır anlamını taşımaktadır.

Kodu özetlersek;

Veri "A" sütunundadır. 1 sütun öteleyerek yapıştır anlamındadır.

Eğer "B" sütunundaki verileri "A" sütununa yapıştırmak isterseniz aşağıdaki kodu deneyebilirsiniz.

Kod:
Sub KOPYALA()
    Dim Veri As Range
    For Each Veri In Range("B1:B10,B20:B29")
        Veri.Copy Veri.Offset(0, -1)
    Next

    MsgBox "Veriler kopyalanmıştır."
End Sub

Veriyi yapıştırmadan önce Hücre doluluk kontrolü (hücre doluysa 1 sonraki hücreye yazsın) de yapması için hangi kod kullanırız. Ayrıca en son işlemi belli aralıklarla tekrarlamasını istesek (zaman dk. olabilir) nasıl bir kod gerekli
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu satırı;

Veri.Copy Veri.Offset(0, 1)

Bununla değiştirip deneyiniz.

Veri.Copy Cells(Veri.Row, Columns.Count).End(1).Offset(0, 1)
 
Üst