• DİKKAT

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

...::: Verileri sütunlara dağıtma :::...

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Merhabalar örnek dosyamda açıklama mevcut.

Bir sütundaki (orijinal belgemde bu sütun A sütunu değil) verilerin diğer sütunlara dağıtılması gerekiyor.

Yardımcı olacak üyelere şimdiden teşekkürler.
 

Ekli dosyalar

Dosyada formül ve makro iç içe kullandım. Düzenleme yapılabilir.

Sayın Okumuş teşekkür ederim, veriler sütunlara ayrıştırılmış oldu.

Bu kodda verilerin birleştirilmiş olarak bulunduğu sayfa ve sütun adı ile ayrıştırılmış verilerin yazılacağı (yazılmaya başlayacağı) sayfa ve sütun adını GİRİŞ isimli bir sayfanın belli hücrelerine yazarak (veya veri doğrulama yöntemiyle seçerek) çalıştırmak istersem kodda nasıl bir değişiklik yapmalıyım acaba?

Bu arada veri tabanının bulunduğu 11055 satırlık sayfanın adını da "VERİ TABANI" olarak değiştirmek istiyorum.

Veri tabanının bulunduğu sayfadaki formüllerin kod ile bir bağlantısı var mıdır?

İlgi ve destek için teşekkürler.

Cevabınızı sabırsızlıkla bekleyeceğim.
 
Son düzenleme:
Bu kodda verilerin birleştirilmiş olarak bulunduğu sayfa ve sütun adı ile ayrıştırılmış verilerin yazılacağı (yazılmaya başlayacağı) sayfa ve sütun adını GİRİŞ isimli bir sayfanın belli hücrelerine yazarak (veya veri doğrulama yöntemiyle seçerek) çalıştırmak istersem kodda nasıl bir değişiklik yapmalıyım acaba?

Bu kısmı anlayamadım? Biraz açıklar mısınız?
 
Bu kısmı anlayamadım? Biraz açıklar mısınız?

Merhabalar Sayın Okumuş.

Maksatım şu idi. Malum konuya eklediğim ve hücrelere dağıtılacak metinler A2 hücresinden başlayarak A sütununda idi.

Orijinal belgemde ise bu veriler, ismi değişen sayfalarda ve AN8'den başlayarak (AN7 başlık hücresi ve başlık da "Başvuru Tanıları" şeklinde) aşağı doğru listeleniyor.

Sorduğum şu idi, ulaşmaya çalıştığım nihai sayfamda, "Verilerin Alınacağı Yer" ve "Verilerin Yazılacağı Yer" için bu sayfadaki bir bölümde;
-- bir hücreye verinin alınacağı sayfanın adını,
-- hemen yanındaki hücrede sütun adını ve
-- onun yanına da verilerin başladığı satır numarasını,

-- makrosunun verileri yazacağı sayfanın adını,
-- verilerin yazılmaya başlayacağı sütun adını,
-- verilerin yazılmaya başlayacağı satır numarasını

yazsam ve makro, verinin alınacağı yeri ve yazılacağı yeri buradan alsa diye düşündüm ve onu sormak istedim. Böyle bir şey mümkün müdür acaba? Eğer mümkün olursa bu yapı olaya esneklik kazandıracaktır diye düşündüm.

Bu arada; Mevcut makro (sanırım) veri tabanı sayfasındaki formüllerle bağlantılı çalışıyor galiba. Bu şart mıdır acaba? Yani formüller olmadan da olabilir mi?
Sizi yoruyorum, kusura bakmayınız. Sağlıcakla.
 
Sub Bul()
Application.ScreenUpdating = False
Range("B3:U11000") = "" ' Bu alan kodların hastalık adını yazacağı alan. önce burayı temizleyelim.

Set s = Sheets("VERİ TABANI") ' verilerin olduğu alan. Önceden sayfa2 idi. " " arasına sayfa adını yazınız.
sonsat = s.Cells(Rows.Count,2).End(3).Row ' s. ile başladığı için veritabanı sayfası B sütunu (2 değeri) son satırı buluyor.

s.Range("C2:C" & sonsat) = "=IF(COUNTIF(GİRİŞ!A$2,""*""&B2&""*"")=1,SEARCH(B2,GİRİŞ!A$2,1),"""")" ' C sütunu son satıra kadar formülü yapıştıryor. Bunu istediğiniz sütuna uygulayabilirsiniz.
s.Range("D2:D21") = "=IFERROR(SMALL(C$2:C$11100,ROW(A1)),"""")" ' c sütunundaki formüle göre bulunan değerleri küçükten büyüğe sıralatıyoruz.
s.Range("D1") = "=COUNT(D2:D20)" ' Kaç tane sayı varsa o kadar döngüye alacağız.

son = Cells(Rows.Count, 1).End(3).Row ' Burası GİRİŞ sayfası A SÜTUNUNDA (1 değeri) son satırı buluyor.

For i = 3 To son 'ilk veri 3. satırdan başladığı için 3 ten başlattık
If Cells(i,1)= "" Then Goto 10 ' eğer i satırı ( A sütunu için) boşsa kodda 10 yazan satıra git. yani 10 satırı ile bu satır arasında işlem yapma demek
Range("A2") = Cells(i, 1).Value ' A2 hücresine hastalık adını yaz. a2 boş olduğu için oraya yazdım. Tabi bu hücre formüllerle bağlantılı. Formüllerdeki A2 burdan geliyor.
For x = 2 To s.Range("D1").Value + 1
deg = s.Cells(x, 4).Value 'Hastalıktan kaç kez bulmuşsa o kadar döngü yapıyor. Hani siz 12 tanı olabilir dediniz ya ondan. Hastalık yazmaya 2. sütundan başladığı için 2 den başlattım.
kac = WorksheetFunction.Match(deg, s.Range("C1:C11100"), 0)' bulunan ilk tanı veri sayfasında kaçıncı satırda olduğunu bulduk.
ad = s.Cells(kac, 2) ' bulduğumuz satırın B sütunun hastalığın adıdır

Cells(i, x) = ad' bu hastalığı sonra Giriş sayfasına yaz dedik
Next
10
Next

End Sub
 
Sayın OKUMUŞ ilginiz için teşekkürler.
Koddaki satırları üşenmeden açıklamışsınız, zamanınızı alıyorum sanırım, kusura bakmayınız.

Kodda değişiklik yaparak düzeni bozmak yerine excel sayfasında, kodun çalışacağı (verileri alacağı ve yazacağı) alanları hücreye yazmanın ve kodun da bu hücrelere yazacağım sayfa ve hücre adına göre çalışmasının esneklik kazandıracağını düşünmüştüm.
Neticede excel belgem durağan değil, zaman zaman sayfa adları ve tablo yapısı değişebiliyor. O nedenle böyle bir şey olabilir mi diye öğrenmek istedim. Yoksa elbette her seferinde verileri sizin hazırladığınız kodu içeren excel sayfasına kopyala yapıştır ile aktarıp, kod çalıştıktan sonra çıkan sonuçları da oradan kopyalayıp bana lazım olan yere yapıştırabilirim. Bunu kodun yapmasını sağlamak mümkün olursa elbette en güzeli olur.
Bu arada kodun sayfaya yazdığı formülleri, işlem tamamlandıktan sonra silmesini sağlamak lazım, hız açısından sorun yaşayacağımı düşünüyorum.
 
Eklemiş olduğum dosyada siliyor. Açıklamaya eklememiştim. Kopyalayıp yapıştırabilirsiniz. Ama en güzeli kodları anlamaya çalışmaktır.
 
Sağ olunuz Sayın Okumuş, ANCAK;

Kontrol ettiğimde sorun olduğunu gördüm.

Kod VERİ TABANINI siliyor ve veriler de sütunlara dağıtılmıyor.
 
Son düzenleme:
Kodun en alt satırını
S.Range("C1:D11100") = ""
şeklinde değiştirin.
 
Sayın Okumuş söylediğinizi yaptım, GİRİŞ sayfasındaki önceki ayrıştırılmış verileri sildim ve kodu çalıştırdığımda;
-- VERİ TABANI sayfasındaki liste silinmiyor
--ama GİRİŞ sayfasında ki ayrıştırma işlemi gerçekleşmedi.
 
Son düzenleme:
Kodu değiştirin.
Sub Bul()
Application.ScreenUpdating = False
Range("B3:U11000") = ""

Set s = Sheets("VERİ TABANI")
sonsat = s.Cells(Rows.Count, 2).End(3).Row
s.Range("C2:C" & sonsat) = "=IF(COUNTIF(GİRİŞ!A$2,""*""&B2&""*"")=1,SEARCH(B2,GİRİŞ!A$2,1),"""")"
s.Range("D2:D21") = "=IFERROR(SMALL(C$2:C$11100,ROW(A1)),"""")"
s.Range("D1") = "=COUNT(D2:D20)"
son = Cells(Rows.Count, 1).End(3).Row

For i = 3 To son
If Cells(i, 1) = "" Then GoTo 10
Range("A2") = Cells(i, 1).Value
For x = 2 To s.Range("D1").Value + 1
deg = s.Cells(x, 4).Value
kac = WorksheetFunction.Match(deg, s.Range("C1:C11100"), 0)
ad = s.Cells(kac, 2)

Cells(i, x) = ad
Next
10
Next
Range("A2") = ""
s.Range("C1:D11100") = ""
End Sub
 
Teşekkür, iki soru bir rica.

Sayın Okumuş şimdi tamam sanırım.
Dağıtılacak verilerin bulunduğu sayfada A2 hücresi tesadüfen BOŞ idi, tabi A sütununda veri olmayan hücreler var.
İki şey sorayım ve konuyu kapatayım;
1) Kodun en sonundaki Range("A2") = "" kısmı ne işe yarıyor?
2) s.Range("D1") = "=COUNT(D2:D20)" kısmında 19 hücre ile sınırlamanın maksadı nedir?
Kod bu verilerle ve bu haliyle çalışır durumda, ilgi ve destek için teşekkürler.

Bu arada; aynı çalışma ilgili olarak belli bir hücre değeri değişikliğine göre çalışmasını umduğum çok sayıda sütun için çalışacak, benzersiz alfabetik sıralama yapmamı sağlayacak GELİŞMİŞ SÜZ içerikli aşağıdaki konu konusunda da bir şeyler söylerseniz çok sevinirim. Halen bu konuya herhangi bir yorum-cevap almış değilim. İmkansız ise en azından bunu bilsem de umutlanmasam.
Konu linki: http://www.excel.web.tr/f48/ok-sutunlu-sayfadaki-verilere-geli-mi-filtre-uygulanmasy-t145401.html
 
Son düzenleme:
A2 hücresine sırasıyla giriş sayfasındaki hastalık adları yazıyor. Örneğin i= 3 değeri iççin A3 hücresindeki hastalık adı A2ye yazılıyor. i=4 için A4 değeri A2 ye yazılıyor. Bu don satıra kadar yazılıyor. i=21 değeri için A21 hücresinde 3 tane hastalık var. Bu durumda veri tabanı sayfasında ilgili hastalıkların karşısında sayı beliriyor. Bu sayılara göre Giriş sayfasına hastalık adı yazılıyor.
D2:D20 ise en fazla 19 hastalık yazılabilir. Siz en fazla 12 hastalık olabilir demiştiniz. Ben en fazla 19 almışım D2:D13 şeklinde de yazılabilir.
 
Vermiş olduğunuz linki boş zamanımda inceleyebilirim.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst