• DİKKAT

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

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
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

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

  • 1.png
    1.png
    117.2 KB · Görüntüleme: 22
  • 2.png
    2.png
    106.5 KB · Görüntüleme: 21
Son düzenleme:
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.
 
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

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
 
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:
Ö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.
 
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

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
 
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 ?
 
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
 
Yusuf bey,

Emekleriniz ve yardımlarınız için teşekkür ederim.
 
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
 
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,
 
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
 
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)
 
Geri
Üst