Makro ile verilen kritere göre veri dağılımı.

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Selamlar...
Ekte belirttiğim dosyada girdiğim verilerin belirtilen kritere göre yerlerinin değişmesi gerekiyor.
Gerekli açıklamalar ekte.
İlgilenirseniz sevinirim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kodu deneyin.

Kod:
Sub duzelt()
Dim deg(25)
For a = 9 To [a65536].End(3).Row
If Cells(a, "a") = "A" Then GoTo 10
For b = 1 To 25
deg(b) = Cells(a, b + 5)
Next
sut = WorksheetFunction.Match(Cells(a, "a"), [sayfa2!2:2], 0)
For c = 1 To 25
Cells(a, c + 5) = deg(Sheets("sayfa2").Cells(c + 2, sut))
Next
10 Next
End Sub
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Sayın L.Menteşeoğlu,
Öncelikle teşekkür ederim. Dağıtma işlemini yapıyor. Fakat ikinci tıklamada da yer değiştiriyor. Bu değiştirme işlemi yine tabloya göre oluyor; ancak verinin yerinin bir defa değişmesi gerek. Örneğin düşeyara fonksiyonunda olduğu gibi. Bunun da bir çaresi var mı? Bir de soru sayısı değişebilir. işlemi herhangi bir hücreden aldığı değere göre yapabilir mi? Yani 25 sınırlamasını kaldırabilir miyiz?
Saygılar...
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki gibi bir mantıkla kodun tek bir sefer çalışması sağlanabilir. 25 sınırlaması elbette kaldırılabilir. Bu işlem sayfa2 için kolaydır. Ancak sayfa1deki tablonun yapısı buna uygun değil. Yani 25ten fazla soru olduğunu sayfa1de nasıl koda tanıtacaksınız?

Kod:
Sub duzelt()
Dim deg(25)
For a = 9 To [a65536].End(3).Row
If Cells(a, "a") = "A" Or Cells(a, "af") <> "" Then GoTo 10
For b = 1 To 25
deg(b) = Cells(a, b + 5)
Next
sut = WorksheetFunction.Match(Cells(a, "a"), [sayfa2!2:2], 0)
For c = 1 To 25
Cells(a, c + 5) = deg(Sheets("sayfa2").Cells(c + 2, sut))
Next
Cells(a, "af") = "*"
10 Next
End Sub
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Belli say&#305;da tablo olu&#351;turaca&#287;&#305;m. 20 soruluk, 25 soruluk, 40 soruluk ve 50 soruluk. Bunlardan zaten 20 ve 25'li&#287;i kullanaca&#287;&#305;m. Di&#287;erleri istisnai durumlarda kullan&#305;lacak. Bir makro arac&#305;l&#305;&#287;&#305; ile ka&#231; soru gireceksem o tabloyu ana sayfaya &#231;a&#287;&#305;raca&#287;&#305;m. &#199;a&#287;&#305;rma i&#351;emi s&#305;ras&#305;nda soru say&#305;s&#305;n&#305; belli bir h&#252;creye yazmas&#305;n&#305; sa&#287;layaca&#287;&#305;m. Mesela 20 sorulu&#287;u &#231;a&#287;&#305;rd&#305;&#287;&#305;mda belirledi&#287;im h&#252;crede 20 yazacak. Sayfa2'deki tablo i&#231;inde ayn&#305; &#351;eyler s&#246;z konusu. 20 sorulu&#287;u &#231;a&#287;&#305;rd&#305;&#287;&#305;mda bu tabloda kay&#305;t yerinden ana yerine gelecek vb...
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Levent hocam,
Kodlar i&#231;in &#231;ok te&#351;ekk&#252;r ederim. Benim i&#231;in &#246;nemi b&#252;y&#252;k. &#199;&#246;lde su bulmu&#351; gibi oldum desem yeridir.
Bir ara bu kodlar&#305;n sat&#305;rlar&#305;n&#305;n yan&#305;na ne i&#351;lem yapt&#305;klar&#305;n&#305; yazabilirseniz memnun olurum. &#199;&#252;nk&#252; bu kodu farkl&#305; &#246;zellikteki tablolarda kullanaca&#287;&#305;m. Uyarlama yapabilmem i&#231;in neyin neye yarad&#305;&#287;&#305;n&#305; iyi bilmem laz&#305;m.
&#304;yi geceler...
 
Katılım
9 Eylül 2008
Mesajlar
6
Excel Vers. ve Dili
2007+2003 İngilizce
Sayın leumruk,

İsteğiniz şu 2 yoldan biri ile yapılabilir.

1) Orjinal verileri değiştirmeden, yerleri değiştirilmiş verileri ayrı bir sayfalarda tutabilirsiniz. Yani orjinal veriler (sayfa1), sıralama anahtarı (sayfa2) ve yerleri değiştirilmiş veriler (sayfa3) olur. Bu durumda, makro, Sayfa1'deki verileri, Sayfa2'teki yer değiştirme anahtarını kullanarak, Sayfa3'e yerleştirir. Bu durumun avantajı, orjinal değerlerinizi hiç bir zaman kaybetmemiş olmanızdır. Her türlü çalışma, Sayfa3'teki işlenmiş veriler üzerinden yapılır. Herhangi bir nedenle geri dönmek çok kolay olur.

2) Sayda1'deyken, Ekle-Ad-Tanımla menüsünü kullanarak değeri 0 (sıfır) olan bir ad (mesela "Koruma") oluşturursunuz.
Makro çalışmaya başladığında, bu değeri kontrol eder.
Eğer değer 0 ise, değiştirme işlemini yapar ve işlemler tamamlandığında bu değeri "1" ile değiştirir. Böylece makro tekrar çalıştırıldığında bu değer 0'dan farklı olacağı için, "Veriler daha önce değiştirilmiş" mesajı verir ve işlem yapmadan durur. Yani makro şöyle olur.
Kod:
Sub duzelt()
Dim deg(25)
If ActiveWorkbook.Names("Koruma").RefersToR1C1 = "=0" Then
     For a = 9 To [a65536].End(3).Row
           If Cells(a, "a") = "A" Or Cells(a, "af") <> "" Then GoTo 10
           For b = 1 To 25
                deg(b) = Cells(a, b + 5)
           Next
           sut = WorksheetFunction.Match(Cells(a, "a"), [sayfa2!2:2], 0)
           For c = 1 To 25
                Cells(a, c + 5) = deg(Sheets("sayfa2").Cells(c + 2, sut))
           Next
           Cells(a, "af") = "*"
      10 Next
     ActiveWorkbook.Names.Add Name:="Koruma", RefersToR1C1:="=1"
Else
     MsgBox "Bu liste daha önce değiştirilmiş."
End If
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn dirsee

2 nolu &#246;nerinizdeki mant&#305;k &#231;ok g&#252;zel tebrik ederim. Yaln&#305;z bu uygulaman&#305;n tek sak&#305;ncas&#305; var oda alta yeni veriler eklendi&#287;inde makronun i&#351;lem yapmayacak olmas&#305;d&#305;r. Bana g&#246;re 1 nolu &#246;neriniz verilerin korunmas&#305; a&#231;&#305;s&#305;ndan &#231;ok mant&#305;kl&#305;d&#305;r.
 
Katılım
9 Eylül 2008
Mesajlar
6
Excel Vers. ve Dili
2007+2003 İngilizce
İltifatınız için teşekkür ederim Sn. Menteşoğlu.

Benim kişisel tercihim de işlenmiş datanın ayrı bir yerde ele alınmasıdır.

2. yönteme, bazı eklemeler yapılarak daha esnek hale getirmek mümkün. Mesela, kullanıcıya "İşlenmiş dataları tekrar işlemek istiyor musunuz?" diye sorulabilir. Veya, "Kontrol" değerini resetleme seçeneği verilebilir.

Yine de orjinal "Ham" datalar üzerinde değişiklik yapmak, bence tercih edilmemesi gereken bir yol.

Saygılarımla,

Dirse ERDEM
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. dirsee,
Y&#246;ntemlerinizden ikiside ger&#231;ekten mant&#305;kl&#305; ve orjinal. &#304;kisinin de de&#287;erlendirmesini yapt&#305;m ve 1 nolu y&#246;ntemin uygun oldu&#287;una kanaat getirdim. Orjinal verinin bir kenarda durmas&#305; avantajl&#305; olacakt&#305;r. Makroyu ne kadar &#231;al&#305;&#351;t&#305;r&#305;rsam &#231;al&#305;&#351;t&#305;ray&#305;m, bana ayn&#305; sonucu verecektir. Benim istedi&#287;imde buydu zaten.
&#304;lginizden &#246;t&#252;r&#252; te&#351;ekk&#252;r ederim.
sayg&#305;lar...
 
Üst