• DİKKAT

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

yevmiye Maddesinde aynı tutara ilişkin açıklamayı bulup istenilen hücreye kopyalamak

Katılım
9 Haziran 2015
Mesajlar
13
Excel Vers. ve Dili
excel 2013_2016
Çok sayıda yevmiye maddesi ile çalışmakta olduğumuz dosyalarda açıklamalar yetersiz kalmakta. bu nedenle tutar eşitliği sağlayan hücrelerde açıklamanın diğer satıra aktarılması ciddi zaman kazandırıyor. yardımınızı istediğim konunun açıklaması aşağıda ve örnek dosyasını ekledim. Yardımlarınız içim şimdiden teşekkür ederim.

391 hesabı karşısında olan (H Sütunundaki) tutar bilgisini bulduktan sonra Aynı yevmiye maddesinde olan (B Sütununda) kayıtların tutar bilgileri içinde (H Sütunundaki) 391 tutarına eşit olanı tespit edip eşit olan rakamın olduğu satırdaki istenen hücredeki (E Sütunundaki) açıklamayı getirmesi alıp 391 in olduğu satırda O sütununa yazması.


Örnek:391 karşısındaki 6497 tl yi H sütununda aradıktan sonra eşit tutarda olan satırdaki E sütunudaki açıklama olan “imar kanunu 23. madde(3194 sayılı yasa- Katılma Payı)” açıklamasını O sütununa yazması.

***bazen 1.000 bazen 300.000 satır veri olduğundan kaç yevmiye maddesi varsa hepsi için yapması gerekiyor satır sınırlaması belirtemiyorum bu nedenle.
 

Ekli dosyalar

henüz cevap gelmedi ama cevap verilirse diye birşey daha eklemek istedim. veriyi alacağı satırlarda N Sütununa da "veri alındı" uyarısı eklerse çok daha işimi kolaylaştırır.
 
Merhaba.

Konuyu, Makro VBA başlığına açmışsınız ancak şimdilik formül ile çözüm önerisinde bulunayım.
Aşağıdaki formülü, açıklama metnini getirmek istediğiniz sütunda ikinci satıra (örneğin I2 hücresine) uygulayın ve liste boyunca tüm sütuna kopyalayın.
Sanırım istediğiniz şey bu.

Uygun olduğumda makro ile çözüm için de bakmaya çalışırım.

NOT: Aranan açıklama metninin bulunduğu satırın, 391 hesap kodunun bulunduğu satıra göre üstte olduğu varsayıldı.

.
Kod:
=[COLOR="red"]EĞER[/COLOR](D2=391;[COLOR="red"]KAYDIR[/COLOR]($E$1;[COLOR="red"]KAÇINCI[/COLOR](B2;$B:$B;0)+[COLOR="red"]KAÇINCI[/COLOR](H2;[COLOR="red"]DOLAYLI[/COLOR]("H"&[COLOR="red"]KAÇINCI[/COLOR](B2;$B:$B;0)&":H"&[COLOR="red"]KAÇINCI[/COLOR](B2;$B:$B;0)+[COLOR="red"]EĞERSAY[/COLOR]($B:$B;B2)+1);0)-2;0);"")
 
Ömer Bey cevabınız için teşekkür ederim. Farklı çalışmalarda denedim son derece faydalı oldu. Formülünüzün en kullanılışlı yanı hesap kodunu değiştirip diğer hesap kodları için uygulanabilir olması.

Denediğim verilerde aynı yev. Maddesinde birden fazla aynı tutar varsa en üstteki açıklamanın getiriliyor olması dikkatimi çekti bu yüzden açıklamanın alındığı satırda yandaki sütunda işaret vb olması mümkün mü bilmiyorum ama olursa çok iyi olur. Birde not olarak belirttiğiniz üstte varsayımının tersine altta varsayımıyla yazabilmeniz mümkün mü? Farklı hesap kodları için uygularken daha sağlıklı sonuç alınır.

makro olursa farklı açıdan da görme şansım olur. Ellerinize sağlık tekrar teşekkür ederim.
 
Tekrar merhaba.

-- Zaten verdiğim formül, arama/sayma işlemini sadece ilgili yevmiye numarası satırlarında yapıyor,
-- Biri aranan hesap kodu'na, diğeri/diğerleri başka hesap kodlarına ait olmak üzere;
H sütununda aynı tutarın 2'den fazla tekrarlanması biraz düşük bir olasılık ama olasılık olasılıktır.
-- Bu değerin hedef hesap kodunun satırından önce ve sonra olması durumu elbette formül/makro ile tespit edilebilir.
-- Aynı tutarda olmak üzere; hangi hesap, hangi hesap ile karşılıklı çalışır/çalışabilir şeklinde bir mantık üzerinden de gitmek mümkün olabilir.

Yukarıda belirttiğim hususları netleştirecek, istediğiniz hususların test edilebileceği,
bir'den fazla yevmiye maddesi içeren yeni bir örnek belge yüklemenizde yarar var sanırım.
.
 
Formül için tekrar teşekkürler farklı olasılıklar üzerine örnekler çıkartım ama daha karmaşık hale gelecek benim açımdan bir süre daha yazdığınız üzerinde çalışıyım.
İçi içe eğer gibi kullanarak birden fazla hesap kodu sorgulaması içinde iyi oldu. Sormak istediğim 2 hücredeki açıklamayı birleştirip gelmesini istersem formüle nasıl ekleme yapmam gerekiyor.
Birde aşağıda olması varsayımında formülü yazarsanız sevinirim onu da inceleyim.
 
Tekrar merhaba.

-- Alt taraftan ilgili sayfanın adına fareyle sağ tıklayıp KOD GÖRÜNTÜLEyi seçin,
-- Açılacak VBA ekranında, sağdaki boş alana aşağıdaki kod'u yapıştırın,
-- Sayfaya bir adet şekil/metin kutusu ekleyin,
-- Eklediğiniz şekile/metin kutusuna fareyle sağ tıklayıp MAKRO ATAyı seçin,
-- Açılacak küçük ekrandan ACIKLAMA_GETIR'i seçip işlemi onaylayın,
Artık sayfaya eklediğiniz şekle/metin kutusuna fareyle tıklayarak kod'u çalıştırabilirsiniz.

Kod, işlem sonuçlarını O sütununa yazar. Bu nedenle; varsa O sütunundaki verilerinizi başka bir alana almadan kod'u çalıştırmayın.

-- Koddaki 391 sayısını değiştirerek başka hesap numaraları için de kullanabilirsiniz,
-- Kod önce O sütununda mevcut verileri siler,
-- 391 hesabın tutarını H sütununda arar ve bulduklarını (391 hesaptan önce veya sonra fark etmez);
... başına sıra numarası vererek,
... aynı tutarın hangi hesap numarasına ait olduğunu,
... bu tutarın bulunduğu satırın numarasını ve
... E sütunundaki açıklamaları 1'den fazla ise satırlar halinde olmak üzere
... O sütununa yazıp, O sütununun genişliğini E sütunununki gibi genişletir.
.
Kod:
[B][COLOR="red"]Sub ACIKLAMA_GETIR()[/COLOR][/B]
Set wf = Application.WorksheetFunction
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
Columns("O:O").ClearContents: Columns("O:O").ColumnWidth = 5
son = Cells(Rows.Count, "A").End(3).Row
aranan = [B][SIZE="4"][COLOR="Blue"]391[/COLOR][/SIZE][/B]
For sat = 2 To son
    ilk = WorksheetFunction.Match(Cells(sat, "B"), Range("B1:B" & son), 0)
    sonn = sat + wf.CountIf(Range("B2:B" & son), Cells(sat, "B")) - 1
    If wf.CountIf(Range("D" & ilk & ":D" & sonn), aranan) = 0 Then
        sat = sonn: GoTo 10
    End If
        bulsat = ilk - 1 + wf.Match(aranan, Range("D" & ilk & ":D" & sonn), 0)
        If wf.CountIf(Range("D" & ilk & ":D" & sonn), aranan) > 0 And _
            wf.CountIf(Range("H" & ilk & ":H" & sonn), Cells(bulsat, "H")) > 1 Then
            For satt = ilk To sonn
                If satt = bulsat Then satt = satt + 1
                If Cells(satt, "H") = Cells(bulsat, "H") Then
                    say = say + 1
                    metin = metin & Chr(10) & say & "- (" & Cells(satt, "D") & _
                            ") (" & satt & ") " & Cells(satt, "E")
                End If
                If satt = son Then Exit For
            Next
        End If
    Cells(bulsat, "O") = Mid(metin, 2, Len(metin) - 1): metin = "": say = 0
10: Next
Columns("O:O").ColumnWidth = Columns("E:E").ColumnWidth + 8: Rows.AutoFit
Columns("A:H").VerticalAlignment = xlCenter
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
MsgBox "İşlem tamamlandı.", vbInformation, "..:: Ömer BARAN ::.."
[B][COLOR="Red"]End Sub[/COLOR][/B]
 
Ellerinize sağlık tekrar. Diğer hesap kodlarını kullanarak uygulamakta kullanılışlı aşama yapıldığında çok fazla veride takılmada yaşatmıyor. Bahsettiğiniz gibi aynı tutarda başka satırlarda veri varsa onların açıklamasını da aynı hücrede alt alta getiriyor çok iyi olmuş.

Makroyu çalıştırdığımda tek sorun verinin içinde ilk 391 satırını buluyor ve sadece ona ilişkin açıklamaları yan tarafa aktarıyor daha alt satırlarda 391 hesabı varsa ona ilişkin açıklamalar gelmedi. Bu açıdan düzeltme yapabilirseniz sevinirim. İyi çalışmalar.
 
Şu an bilgisayar başında değilim. Hatalı sonuç aldığınız ve başka bir sütuna olması gereken sonuçların yazıldığı bir örnek belge yüklerseniz vakit bulduğumda bakıp dönüş yaparım.
 
örnek dosya ekledim Ömer Bey . örnek dosyada 3 farklı yevmiye numarası var ve her birinde sadece ilk 391e ilişkin açıklama getiriyor ama diğer 391 satırları için açıklama getirmiyor.
 

Ekli dosyalar

Tekrar merhaba.

Ben önceki kod'u oluştururken, (normal olarak) aynı yevmiye numarasında aynı hesabın 1'den fazla kez yer almayacağını düşünmüştüm.

Önceki cevabımdaki kod, aşağıdaki kırmızı kısımlar silinerek güncellendi
( sat = sonn //// sat = satt - 1).

Sayfayı yenileyerek önceki cevabımdaki kodu kontrol ediniz.

Ayrıca örnek belgenizdeki yapı ile gerçek belgenizdeki yapı aynı ise;
E sütunundaki FATURA NO bilgisinden hareketle işlem yapılabilir gibi geldi bana ama neyse artık.

.
 
391in olduğu satırın üzerindeki ve altındaki satırlarda aynı tutar varsa sadece daha alt satırlarındaki açıklamayı getiriyor ancak üzerindeki satıra ilişkin açıklama getirmiyor. Özel sıralamadan veya sorgulanan hesap koduna 1, diğerlerine 0 vererek sorgulanan hesap kodunun olduğu satırları yevmiyelerde en üst satırlarda gösterdim ve makroyu uyguladığımda her bir 391e ilişkin açıklamaları getirdiği gibi kaç satırda aynı tutar varsa onlara ilişkinde açıklama getiriyor. Aynı tutara ilişkin diğer hesap kodları kendisinden aşağıda olursa bu makro kullanılabilir.


Şu an için tek eksik ise eğer aynı yevmiye maddesinde sorgulanan 391 tutarına eşit bir tutar yoksa aşağıdaki kısımda hata veriyor makro çalışmayı durduruyor. Buna ilişkin çözüm üretebilir misiniz?



“Cells(bulsat, "O") = Mid(metin, 2, Len(metin) - 1)”
 
Tekrar merhaba.

7 numaralı cevabımdaki kod'u tekrar güncelledim.
Kod'un yeni halini, verilerinizde sıralama veya başka bir işlem yapmadan,
doğrudan ham veri üzerinde çalıştırarak deneyiniz.
.
 
Geri
Üst