• DİKKAT

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

Hesapla Sırala

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
Sorunumu aşağıda biraz fazla detaylıca açıkladım. Bunun nedenini mesajın en sonunda yazdım.
Hedefim sorunum ve ihtiyacımın tam olarak anlaşılması.
Örnek olması bakımından; el yordamıyla 5 satırlık veri aktarması yapılmıştır ve bu işlemin nasıl yapıldığı anlatılmıştır.

Kod yazmayı bilmeyince de elimden başka bir şey gelmiyor, yazıyorum ve bekliyorum.

Lütfen örnek dosyamı açtıktan aşağıdaki açıklamaları okuyunuz.

Yapılacak işlemler adım adım aşağıdaki gibi.
A) Sayfa2'nin 3'üncü satırına yazılacak değerler:
1) Sayfa1'deki dolu tüm satırlar için; G sütunundan başlayarak, sütun atlayarak AS sütununa kadarki verileri topla (atlanan hücreler zaten sayısal değil),
2) Her satırdaki MAKSİMUM değerini bul ( Bu satır Sayfa2'ye veri aktaracağımız satırdır.),
3) Bir üstteki 2 numaralı işleme göre bulunan satırda G - AS sütunları aralığındaki ilk sayısal değeri ve bu değerin solundaki ( "K_" diye başlayan metni ) Sayfa2'nin E3 ve F3 hücresine yaz.

(Sayfa2'ye aktarılan bu değer bundan sonraki işlemlerde hiç kullanılmayacak yani Sayfa1'den Sayfa2'ye kes->yapıştır yapmışız gibi düşünülmelidir.)

4) Yukarıdaki 2 numaralı maddede tespit edilen maksimum değerin bulunduğu satırda A, B, C ve D sütunlarındaki değerleri 3 numaralı maddeye göre veri yapıştırılan Sayfa2'deki hücrenin soluna A3, B3, C3 ve D3 hücrelerine yaz.

(Sayfa1'in A, B, C, D sütunlarındaki veriler, daha sonra da kullanılacak o yüzden Sayf1'den Sayfa2'ye kopyala-> yapıştır yapmışız gibi düşünülmelidir.)

1. hesaplama ve veri alma bitti (Sayfa2'de 3'üncü satıra veriler gönderildi).

B) Sayfa2'de bir sonraki satıra yazılacak değerler:
Yukarıdaki işlemler aynı şekilde tekrarlanacak. Dikkat edilecek husus, daha önce Sayfa2'nin E3 ve F3 hücresine yazılan değerler hiç yokmuş gibi düşünülerek işlemler (toplama, maksimumu bulma ve o satırdaki verileri aktarma) yapılacak.

Böylece Sayfa2'de 6 sütunlu ve Sayfa1'deki G - AS sütunları aralığındaki sayısal değerlerin adeti kadar (Örnek verilerde bu sayı 166)
satırlı bir liste oluşacak.

İlgileneceklere teşekkürler.

Bir de şimdiye kadar benzer durumlarda aldığım yorumlara değinmem lazım.
--Detaylı açıklamayınca; "anlaşılmıyor" ,
--Dosya eklemeyince; "örnek dosya ekleseniz bakarız",
--Anlaşılır olsun diye dosya ekleyip, adım adım ne yapılması gerektiğini yazınca da; "kimse böyle maddeler halinde bir şeyle uğraşmaz" diye yorum geliyor.


Sabırla bekleyeceğim.
 

Ekli dosyalar

Son düzenleme:
Merhaba
U34 ürününden neden 1 tane değil 3 tane veri aldınız? yada
U14 ürününden neden 3 tane değil 1 tane veri aldınız?

Anladığım kadarı ile Sayfa1 E sütunundaki maksimum değerlere göre sırayla (sütun sırası ile) Sayfa2'ye mi aktarılacak?
 
Merhabalar Muhammet Bey!...

1. veriyi alırken belgedeki maksimum hesabına göre veri alınacak satır, U34'ün bulunduğu satırdı (çünkü satır toplamı 5.957.290 idi ve bu değer maksimum olan) ve F sütununda başlayarak soldan ilk veri olan 196.395 değeri ve ona bu değere ait olan K_101 bilgisi Sayfa2'ye aktarıldı,

2. veriyi almak için tekrar toplama ve maksimum bulma işlemi yapılması lazım. Daha önce Sayfa2'ye aktarılan 196.395 değeri yok sayılarak toplam alınıp maksimum karşılaştırması yine yapılıyor, bu sefer U_34 ürününün bulunduğu satırın toplamı 5.760.895'ye düştü ancak bu toplam rakamı yine maksimum olan değer, o yüzden yine U_34'ün blunduğu satırdan bilgi alınacak, bu sefer alınacak veri o satırda yer alan sıradaki veri yani 589.185 değeri ve onun solundaki K_187.

3. veri alınırken de aynı mantıkla devam ediliyor, U_34'ün satır toplamı bu kez 5.171.710 oluyor (daha evvel aktarılan iki veri hariç tutularak) ve bu tutar yine maksimim olan. Bu nedenle üçüncü veri de o satırdan alınacak ve alınacak sıradaki veri bu kez, 261.860 ve K_146 bilgileri.

4. veri alınırken de aynı mantıkla devam ediliyor, U_34'ün satır toplamı bu kez 4.909.850'e düştü (daha evvel aktarılan 3 veri hariç tutularak) ve bu tutar bu kez maksimum değil, bu defa maksimum olan U_14'ün bulunduğu satırdaki 4.996.878 . Bu nedenle alınan dördüncü veri U_14'ün satırındaki F sütunundan itibaren ilk veri olan 293.934 ve K_121 bilgileri.

Aynı mantıkla ( her veri alındıktan sonra toplama ve maksimum bulma işlemi tekrarlanarak ) tablodaki F sütunundan itibaren tüm veriler (mevcut verilere göre 166 adet alınacak veri var) Sayfa2'ye aktarılana kadar devam edilecek.
Ben, sadece 5 veriyi el yordamıyla aktardım.

Umarım izah edebildim.

İlgilendiğiniz için teşekkürler.
 
Son düzenleme:
Merhaba,
Sub Hesapla()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set S = Sheets("Sayfa2")
S.Range("A3:F1000") = ""
Sheets("Sayfa1").Copy After:=Sheets(Sheets.Count)
adet = WorksheetFunction.CountA(Range("F3:AS1000")) / 2
For i = 1 To adet
son = Cells(Rows.Count, "E").End(3).Row
Range("E3:E" & son) = "=SUM(F3:AS3)"
mak = WorksheetFunction.Max(Range("E3:E" & son))
kac = WorksheetFunction.Match(mak, Range("E1:E" & son), 0)



son1 = S.Cells(Rows.Count, "A").End(3).Row

S.Range(S.Cells(son1 + 1, 1), S.Cells(son1 + 1, 4)) = Range(Cells(kac, 1), Cells(kac, 4)).Value
S.Range(S.Cells(son1 + 1, 5), S.Cells(son1 + 1, 6)) = Range(Cells(kac, 6), Cells(kac, 7)).Value
Range(Cells(kac, 6), Cells(kac, 7)) = ""
Range("F3:AS" & son).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft

Next
ActiveSheet.Delete
End Sub
Dosyayı inceleyiniz.
 
Son düzenleme:
Muhammet Bey çok teşekkür ediyorum.

Ancak soracağım iki husus var.
Satır toplamını aldığım E sütunundaki verileri ben elle sıralama yaparken yardımcı olması için kullanıyordum, aslında o sütun asıl belgemde olmayacak, bir de o sütun içeriğini silip makroyu çalıştırınca, (ben sildikten sonra) makro E3 hücresine "=TOPLA(F5:AS5)" formülünü yazıyor ve makrodaki;
Kod:
kac = WorksheetFunction.Match(mak, Range("E1:E" & son), 0)
satırında durup hata veriyor.

Toplama ve maksimumu bulma işlemini makro kod içerisinde yaptırmak mümkün değil midir acaba?

Ama eğer E sütunundaki benim yazdığım formülleri silmeden bırakıp (mevcut haliyle) , makroyu çalıştırırsam tam istediğim sonucu veriyor.

Söylediğim gibi, E sütunu asıl belgemde yok, bir şey yapılabilir mi acaba?
.
 
Bahsettiğim E3 hücresine formül yazma işlemini orijinal Sayf1'de değil Sayfa1'in kopyasını oluşturarak, ikinci çalıştırmada "Sayfa1 (2)", üçüncü çalıştırmada "Sayfa1 (3)", dördüncü çalıştırmada "Sayfa1 (4)" diye sayfa oluşturup bahsettiğim formül yazma işini o sayfanın E3 hücresinde yapıyor.
 
E sütununu siliniz. Kodları değiştiriniz.
Sub Hesapla()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set S = Sheets("Sayfa2")
S.Range("A3:F1000") = ""
Sheets("Sayfa1").Copy After:=Sheets(Sheets.Count)
Columns(5).Insert

Range("E2") = "X"
adet = WorksheetFunction.CountA(Range("F3:AS1000")) / 2
For i = 1 To adet
son = Cells(Rows.Count, "A").End(3).Row + 1
Range("E3:E" & son) = "=SUM(F3:AS3)"
mak = WorksheetFunction.Max(Range("E3:E" & son))
kac = WorksheetFunction.Match(mak, Range("E1:E" & son), 0)



son1 = S.Cells(Rows.Count, "A").End(3).Row

S.Range(S.Cells(son1 + 1, 1), S.Cells(son1 + 1, 4)) = Range(Cells(kac, 1), Cells(kac, 4)).Value
S.Range(S.Cells(son1 + 1, 5), S.Cells(son1 + 1, 6)) = Range(Cells(kac, 6), Cells(kac, 7)).Value
Range(Cells(kac, 6), Cells(kac, 7)) = ""
Range("F3:AS" & son).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft

Next

ActiveSheet.Delete
End Sub
 
Sayın Okumuş çok teşekkür ederim, tam istediğim sonucu veriyor, gerçekten büyük yükü aldınız üstümden, sağ olunuz.

Peki acaba sıralamanın yapıldığı Sayfa2'nin G sütununa (oluşan listenin bir yanındaki sütun)
Sayfa1'in 2. satırında yer alan işlem numarasını getirmek mümkün müdür?
Bu bilgi o satırdan alınan kaçıncı bilgi olduğunu gösterecek benim için.

Gerçekten çok sağ olun.
 
Mükerrer veriler olduğu için iki sütunda veri görülebiliyor.
Sub Hesapla()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set S = Sheets("Sayfa2")
S.Range("A3:F1000") = ""
Sheets("Sayfa1").Copy After:=Sheets(Sheets.Count)
Columns(5).Insert

Range("E2") = "X"
adet = WorksheetFunction.CountA(Range("F3:AS1000")) / 2
For i = 1 To adet
son = Cells(Rows.Count, "A").End(3).Row + 1
Range("E3:E" & son) = "=SUM(F3:AS3)"
mak = WorksheetFunction.Max(Range("E3:E" & son))
kac = WorksheetFunction.Match(mak, Range("E1:E" & son), 0)



son1 = S.Cells(Rows.Count, "A").End(3).Row

S.Range(S.Cells(son1 + 1, 1), S.Cells(son1 + 1, 4)) = Range(Cells(kac, 1), Cells(kac, 4)).Value
S.Range(S.Cells(son1 + 1, 5), S.Cells(son1 + 1, 6)) = Range(Cells(kac, 6), Cells(kac, 7)).Value
Range(Cells(kac, 6), Cells(kac, 7)) = ""
Range("F3:AS" & son).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft

Next

ActiveSheet.Delete

son = Cells(Rows.Count, "F").End(3).Row
Range("G3:AT" & son) = "=IF(ISERROR(SUMPRODUCT(MATCH($E3&$F3,Sayfa1!E$3:E$1000&Sayfa1!F$3:F$1000,0))),"""",(COLUMN(A1)+1)/2&"". İşlem"")"
Range("G3:AT" & son) = Range("G3:AT" & son).Value
Range("G3:AT" & son).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
End Sub
 
Yeni kod;
Kod:
Range("G3:AT" & son) = "=IF(ISERROR(SUMPRODUCT(MATCH($E3&$F3,Sayfa1!E$3:E $1000&Sayfa1!F$3:F$1000,0))),"""",(COLUMN(A1)+1)/2&"". İşlem"")"
satırında hata verdi.

Bu şekilde kod değişikliği ve hata düzeltmeyle uğraşmak yerine;

örneğin Sayfa2 E8 hücresi için
U_34 / 4. İşlem
sonucunu doğuracak şekilde;
Kod:
=A8&" / "&EĞERSAY($A$3:A8;A8)&". İşlem"
formülü uygulamış gibi,

tüm sütuna aynı işlem yapılmasını sağlayacak bir kod değişikliği daha pratik olur.
Sizi gerçekten yoruyorum sanırım. Her şey için sağ olunuz.
 
Akıl akıldan üstündür. Bu hiç aklıma gelmemişti.
 
Estağfurullah, fikir var da kod yazmayı bilmeyince, böyle bekliyor insan.

Bir de espri.

Benim durumum "Vermeyince Mabut neylesin Mahmut" durumu yani.
 
Bu şekil deneyiniz.
Sub Hesapla()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set S = Sheets("Sayfa2")
S.Range("A3:G1000") = ""
Sheets("Sayfa1").Copy After:=Sheets(Sheets.Count)
Columns(5).Insert

Range("E2") = "X"
adet = WorksheetFunction.CountA(Range("F3:AS1000")) / 2
For i = 1 To adet
son = Cells(Rows.Count, "A").End(3).Row + 1
Range("E3:E" & son) = "=SUM(F3:AS3)"
mak = WorksheetFunction.Max(Range("E3:E" & son))
kac = WorksheetFunction.Match(mak, Range("E1:E" & son), 0)



son1 = S.Cells(Rows.Count, "A").End(3).Row

S.Range(S.Cells(son1 + 1, 1), S.Cells(son1 + 1, 4)) = Range(Cells(kac, 1), Cells(kac, 4)).Value
S.Range(S.Cells(son1 + 1, 5), S.Cells(son1 + 1, 6)) = Range(Cells(kac, 6), Cells(kac, 7)).Value
Range(Cells(kac, 6), Cells(kac, 7)) = ""
Range("F3:AS" & son).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft

Next

ActiveSheet.Delete

son = Cells(Rows.Count, "F").End(3).Row
Range("G3:G" & son) = "=A3&"" / ""&COUNTIF(A$3:A3,A3)&"". İşlem"""
Range("G3:G" & son) = Range("G3:G" & son).Value
End Sub
 
.İşlem metninden önce ürün adının da gelmesi için koddaki
Kod:
Range("G3:G" & son) = G3 & "=COUNTIF(A$3:A3,A3)&"". İşlem"""
Range("G3:G" & son) = Range("G3:G" & son).Value
bölümünde neyi değiştirmem gerekir acaba?
 
Sayın Muhammet OKUMUŞ her şey için çok teşekkür ederim, sizi oldukça yordum, zahmet verdim sağ olunuz. Epeydir, bu sitede böyle yan yana çalışıyormuş gibi, karşılıklı konuşarak bir sorunum çözülmemişti.

Bu yazdığınız kod bir bütünün parçasıydı, biraz daha mesafe alınca çalışmam hakkında görüş ve olursa yeni fikir ve görüşlerinizi bekleyeceğim. Dün gece 01:11'de açtığım bu konuyu şu an 16:23 itibariyle kapatıyorum.

Her şey gönlünüzce olsun.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst