Çözüldü DİZİ İLE SAYFADAN SAYFAYA BİLGİ ÇEKME

  • Konuyu başlatan Konuyu başlatan MESKO
  • Başlangıç tarihi Başlangıç tarihi

MESKO

Normal Üye
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe

Ekli dosyalar

Üstadım süper olmuş. Teşekkürler.

Öğrenme babında zahmet olmaz ise kodu bir tık ileri taşısak LBound / Ubount ile dinamik dizi yöntemiyle yapabilirmisiniz.

Saygılar.
 
Ömer hocam,

di = Sheets("dizi1").[A2:c6].Value
da = Sheets("DATA").[A2:F6].Value bu iki satırı

di = Sheets("dizi1").Range("A2:C" & Cells(Rows.Count, 1).End(3).Row).Value
da = Sheets("DATA").Range("A2:F" & Cells(Rows.Count, 1).End(3).Row).Value bu iki satır ile değiştirince sizin bir önceki kodlarınızdaki gibi yani OLMASI GEREKEN sayfasındaki sonucu alıyorum.

Fakat
3AKDENİZHÜSEYİN
bu satırı A7 ye yapıştırınca AKDENİZ HÜSEYİN'nin KALAN sütununa 0 yazıyor.

Yani sanki tam dinamik olmadı.

Rica etsem kontrol edebilirmisiniz.
 
Son veri satırını belirlerken, sayfa ismini hem Range, hem de Cells ibaresinden önce kullanmanız lazım.
Sayfa adı belirtilmezse, makro bunu aktif sayfadaki hücre veya alan olarak algılayacaktır.

Bunun halli için;
di = Sheets("dizi1").Range("A2:C" & Cells(Rows.Count, 1).End(3).Row).Value
yerine
di = Sheets("dizi1").Range("A2:C" & Sheets("dizi1").Cells(Rows.Count, 1).End(3).Row).Value
şeklinde yazmalısınız.

Aslında konu geniş.
Bence ilk yapmanız gereken; sonuçları, veri alınan bir konuma değil OLMASI GEREKEN sayfası gibi
sadece başlıkların oduğu boş sayfaya yazdırmak daha mantıklı. Yani dizi sayfası hem veri okunan hem sonuç yazılan sayfa durumunda.

.
 
Ömer hocam
di değişkenini dediğiniz gibi değiştirdikten sonra SONUC sayfası ekleyip aşağıdaki satırıda revize edince.

Sheets("SONUC").[D2].Resize(UBound(di), UBound(snc, 2)) = snc ' yazdırılan alan

sonuç şu şekilde oluyor.
MAAŞPUANAVANSKALAN
1000​
100​
900​
2000​
200​
1800​
3000​
300​
2700​
4000​
400​
3600​
5000​
500​
4500​
0​
0​

yani altta satır eklenirse KALAN sıfır oluyor.

Müsait bir zamanınızda bakabilirmisiniz.
 
Bence örnek belge yenileyin.
Sonuç sayfasına yazılacak şey sadece sayısal kısım mıdır yoksa, ilk üç sütun da yazılacak mıdır vs.

OLması gereken durumu netleştirin.

.
 
Aşağıdaki kod ile SONUÇ sayfasına yazdırma işlemini hallettim. Subscript out of range belasından kurtulduk. Fakat di sayfasına en alt satıra yeni bilgi girince KALAN sıfır sorunu devam ediyor.

Az sonra örnek belge ekleyeceğim.

Sub BARANBOUND()

di = Sheets("dizi1").Range("A2:F" & Sheets("dizi1").Cells(Rows.Count, 3).End(3).Row).Value
da = Sheets("DATA").Range("A2:F" & Cells(Rows.Count, 1).End(3).Row).Value


ReDim snc(1 To UBound(di), 1 To UBound(da))

For i = LBound(di) To UBound(di)
For a = LBound(da) To UBound(da)

If di(i, 2) & di(i, 3) = da(a, 2) & da(a, 3) Then

snc(i, 1) = da(i, 1)
snc(i, 2) = da(i, 2)
snc(i, 3) = da(i, 3)


snc(i, 4) = da(i, 4):
snc(i, 6) = da(i, 6)

snc(i, 7) = snc(i, 4) - snc(i, 6)


End If:
Next a:
Next i

Sheets("SONUC").[a2].Resize(UBound(di), UBound(snc, 2)).ClearContents
Sheets("SONUC").[a2].Resize(UBound(di), UBound(snc, 2)) = snc

End Sub
 
Onu dün bir önceki versiyonda yapmıştım hata veriyordu sanırım tür hatası.
Fakat siteye eklediğim bugünkü son kodlarda onu değiştirmek aklıma gelmedi hocam.
Hemen deniyorum.
 
Ömer hocam
da = Sheets("DATA").Range("A2:F" & Sheets("DATA").Cells(Rows.Count, 1).End(3).Row).Value
yapınca if end if satırları arasındaki tüm satırlar için Subscript out of range hatası veriyor.
 
Ömer hocam
ALLAH razı olsun. Kod çalışıyor.
Fakat kafama takılan konu şu

dizi1 sayfasına
7.satıra 4 KARADENİZ MEHMET
8.satıra 2 EGE VELİ
yazdığımızda neden subscript out of range hatası veriyor.
Yani veritabanına mükerrer bir giriş kayıt edildiğinde hata üretiyor.

Tüm yardımlarınız için teşekkürler. Allah zihin açıklığı versin.
 
Yapmak istediğinizi yazmıyorsunuz.

Karar verilecek bazı hususlar var.
-- sonuç sayfasında listelenecek veriler için temel dayanak liste neresidir?
Bu sayfa hangisiyse (mevcut kod dizi1 sayfasını dayanak olarak kullanıyor) bu alandaki veriler tekil (benzersiz) olmalıdır.
Buradaki veriler DATA sayfasında aranıyor, bulduğu eşleşmelerde ise SAYISAL işlemlere geçiliyor.
-- neresi olursa olsun, bir dayanak noktası olmalıdır.
-- dayanak olmayan sayfada birden fazla eşleşme halinde yapılacak işlemin ne olduğu (üstüne ekle/çıkart nese artık) da netleştirilmelidir.
 
Ömer Hocam, kurguyu şu şekilde düşünmüştüm. Yanlış anlaşılma oldu galiba.

Buradaki veriler DATA sayfasında aranıyor, bulduğu eşleşmelerde ise SAYISAL işlemlere geçiliyor. ------ sabit bilgiler bu sayfada

dizi1 sayfasından veri girişleri yapılacak.

BRN sayfasında eksilterek yani maaştan avansları düşerek KALAN tutara ulaşılacak.

Hürmetler.
 
İşte diyorum ki, rastgele veri yazmak yerine, sayfalardan birinde tekil (benzersiz) bir personel listesi olmalı,
sütunlardan biri de benzersizliği garanti altına alacak SİCİL no/ TC kimlik no gibi sir veri olmalı.
Neticede SONUÇ listesinin ilk sütunları, bu listenin birebir aynısı olur zaten.
KEsinti sayfasında (satır sayısı fazla da olabilir doğal olarak) ise veriler tekrarlı olabilir, rastlanan her satırdaki AVANS rakamı, MAAŞ kaleminden düşülür mesele değil.
Tabi kesinti listesinde de tekrarlanan kişiler için MAAŞ bilgisi aynı olmalı.

Dediğim gibi anlamlı verilerden oluşan bir örnek belge yükleyin, onun üzerinden gidilsin.
Bu şekilde, havanda çok su döveriz.
 
Ömer üstadım,
Konuyu açarken dediğim gibi diziler bu haftaki dersim idi. Amacım dizileri bir nebze kavramak.
Bu döngüden tek kişinin bakiyesini alıp bir değişkene atacağım ve Access ile oluşturduğum çalışmamda kullanacağım.
Tüm bunları deneye deneye kendi başıma yapmaya çalışacağım. Yapamadığım yerlerde üstadların , arkadaşların , forumdaşlarımızın desteğine müracaat edeceğim inşallah. Dediğim gibi amaç dizilerin temelini kavramak.
Zamanınızı aldım hakkınızı helal ediniz.
Saygılar , hürmetler.
 
Üst