Programdan Aktarılan Verileri İstenen Biçimde Listeleme

  • Konuyu başlatan Konuyu başlatan Qene
  • Başlangıç tarihi Başlangıç tarihi
Katılım
28 Tem 2022
Mesajlar
360
Excel Versiyonu
Excel 365
Excel Sürümü
32 Bit
Excel Dili
Türkçe
Elimde, kullandığımız programdan aktarılan çalışan verileri var. Bu veriler, çalışan bölümlerini ayrı hücrede, çalışanlar ise tek bir hücrede yazdırmaktadır.

1703334064860.webp


Ayrı bir alanda ise, çalışanların başka bilgilerinin yer aldığı bir tablo bulunmaktadır.

1703334168603.webp


Yapmak istediğim, iki ayrı tablodaki verileri kullanarak, 3. bir tablo oluşturmak. Yani aşağıdaki gibi:

1703334215754.webp


Örnek dosyamı ekliyorum, yardımlarınızı rica ederim.
 

Ekli dosyalar

Çözüm
@Qene

@Ömer BARAN hocamın kodlarını aşağıdaki gibi değiştirmeniz sanırım yeterli olacaktır:
VBA:
Function PER_LISTELE(liste As Range, veri As Range)

ReDim snc(1 To 4, 1 To 1)
s = 1
snc(1, 1) = "Bölüm"
snc(2, 1) = "Sicil"
snc(3, 1) = "Çalışan"
snc(4, 1) = "Maaş"
xd = veri  ' xd = dizi_siralama(veri) satırını kaldırdık

For a = 1 To veri.Rows.Count
    mtn = Replace(Replace(Replace(Replace(Application.Index(xd, a, 2), ",", ";"), "; ", ";"), ": ", ":"), " :", ":")
    bolum = Application.Index(xd, a, 1)
    v = Split(mtn, ";")
    For k = 0 To UBound(v)
        sicil = Split(v(k), ":")(0)
        isim = Split(v(k), ":")(1)
        sat = Application.Match(isim, Application.Index(liste, 0, 1), 0)
        maas =...
Şunu deneyin.

Formül kullanımı: =PER_LISTELE(B5:C16;E5:F8)

VBA:
Function PER_LISTELE(liste As Range, veri As Range)

ReDim snc(1 To 4, 1 To 1): s = 1
snc(1, 1) = "Bölüm": snc(2, 1) = "Sicil"
snc(3, 1) = "Çalışan": snc(4, 1) = "Maaş"
xd = veri
xd = dizi_siralama(veri)
For a = 1 To veri.Rows.Count
    mtn = Replace(Replace(Replace(Replace(Application.Index(xd, a, 2), _
                        ",", ";"), "; ", ";"), ": ", ":"), " :", ":")
    bolum = Application.Index(xd, a, 1)
    v = Split(mtn, ";")
    For k = 0 To UBound(v)
        sicil = Split(v(k), ":")(0)
        isim = Split(v(k), ":")(1)
        sat = Application.Match(isim, Application.Index(liste, 0, 1), 0)
        maas = Application.Index(liste, sat, 2)
        s = s + 1: ReDim Preserve snc(1 To 4, 1 To s)
        snc(1, s) = bolum: snc(2, s) = sicil
        snc(3, s) = isim: snc(4, s) = maas
    Next
Next
PER_LISTELE = Application.Transpose(snc)

End Function
 
Kod:
=REDUCE({"Bölüm";"Sicil";"Çalışan";"Maaş"};E5:E8;LAMBDA(a;b;LET(e;METİNBÖL(AL(b:F5;-1;-1);{":"\": "};{", "\"; "});DÜŞEYYIĞ(a;SIRALA(EĞERYOKSA(YATAYYIĞ(b;EĞERHATA(--e;e);DÜŞEYARA(BIRAK(e;;1);B4:C16;2;));b);2;-1)))))

Deneyin.
 
Kod:
=LET(c;F5:F8;m;KIRP(METİNBÖL(ARALIKBİRLEŞTİR(c&";");":";{",";";"};1));g;SÜTUNA(ÇOKEĞER(ESAYIYSA(BUL(AL(m;;1);SATIRA(c)));SATIRA(E5:E8));2);p;DÜŞEYARA(BIRAK(m;;1);B5:C16;2;);SIRALA(YATAYYIĞ(g;m;p);{1;3}))

Excel 365 alternatifi olsun.
 
@Qene

@Ömer BARAN hocamın kodlarını aşağıdaki gibi değiştirmeniz sanırım yeterli olacaktır:
VBA:
Function PER_LISTELE(liste As Range, veri As Range)

ReDim snc(1 To 4, 1 To 1)
s = 1
snc(1, 1) = "Bölüm"
snc(2, 1) = "Sicil"
snc(3, 1) = "Çalışan"
snc(4, 1) = "Maaş"
xd = veri  ' xd = dizi_siralama(veri) satırını kaldırdık

For a = 1 To veri.Rows.Count
    mtn = Replace(Replace(Replace(Replace(Application.Index(xd, a, 2), ",", ";"), "; ", ";"), ": ", ":"), " :", ":")
    bolum = Application.Index(xd, a, 1)
    v = Split(mtn, ";")
    For k = 0 To UBound(v)
        sicil = Split(v(k), ":")(0)
        isim = Split(v(k), ":")(1)
        sat = Application.Match(isim, Application.Index(liste, 0, 1), 0)
        maas = Application.Index(liste, sat, 2)
        s = s + 1
        ReDim Preserve snc(1 To 4, 1 To s)
        snc(1, s) = bolum
        snc(2, s) = sicil
        snc(3, s) = isim
        snc(4, s) = maas
    Next
Next
PER_LISTELE = Application.Transpose(snc)

End Function
 
Çözüm
Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst Alt