Çözüldü Birden Çok Kritere Göre İşlem Yapma

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ycicek

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba Üstadlarım,
Yine ben 🥺 Yine karmaşık sorularım var. İnşaallah başlığı düzgün atmışımdır.

Ekli belgemizde Aylık Vardiya Listesi yapmaya çalıştım. Ayın ilk günü bir önceki ayın son günü vardiyası neyse ona göre manuel olarak girilmesi ve akabinde diğer 29 günün verisinin ilk gün verisine göre gelmesini istiyorum. Bunu formüller ile yapabilir miyiz?

Sorunun etraflıca anlaşılabilmesi için belgenin içindeki açıklamayı okumak gerekiyor. Örnek olması açısında bir de vardiya listesi ekliyorum.
Not: Açıklama Personel Listesi Sayfasında.

Şimdiden teşekkür ediyorum.

Saygılarımla
Yasin ÇİÇEK
 

Ekli dosyalar

Çözüm
Sayın @ycicek .

D14'e uygulayıp sağa ve aşağı doğru kopyalacağınız formül olarak aşağıdaki formülü oluşturdum.
O2 'deki tarih yılın ilk haftasındaki bir gün olduğunda, B14:B19 arasına yazılan vardiya türüne göre sonuç verir ve
izleyen tarihlerde her kişinin kendi hafta tatili gününde vardiya türü, 5'inci satırdaki seçime göre her hafta değiştirilir.

Belgenizde mevcut formüllerde kullanılan 1.000.000 satır / 6-7 sütunluk alan başvurularının yerine AD TANIMLAMALARI ekledim.
Mevcut formüllerinizi incelemedim,
sadece alan başvurularını DİNAMİK yapıya kavuşturdum ve sütun adına göre adlandırdım (PL_B, PL_C gibi sayfa adı ve sütun adı şeklinde).
Mevcut formüllerinizi de buna göre güncelledim.

Sürpriz olarak da eklediğim...
Merhaba Sayın @ycicek .

Sorunuz ilk bakışta çok karmaşık görünüyor.
İsterseniz tüm koşulları birden dikkate almak yerine işlemi adım adım ilerletelim.

Anladığım kadarıyla B4:B19 arasına herbir personel için A, B, C, .. gibi vardiyayı temsil eden harf elle yazılıyor.
Alt taraftaki listeden de izin/rapor/sendika izni, hafta tatili bilgisi kontrol edilmesi gerekiyor.

Buna göre; D14 hücresine aşağıdaki formülü uygulayıp sağa ve aşağı doğru kopyaladığınızda elde edilen sonuç istediğiniz gibi bir sonuç mudur?

Formülde kontrol edilen verilerin öncelik sırasına göre
(izinliyse HT yazılmaz ise Yİ önce HT satırı sonra yazılmalı,
sendika izniyle rapor aynı tarihi kapsıyorsa S yazılmalı .... gibi öncelik sırasından söz ediyorum
)
satırların yerlerini değiştirebilirsiniz.

Verdiğim formüldeki öncelik sıralaması S, Yİ, R, HT, VARDİYA şeklinde.

Bir de son bir hatırlatma; formüllerinizde 1.000.000 satırlık alanı kullanıyorsunuz.
Böyle bir formül yapısı belgenizin yavaş çalışmasına neden olur.
Bu yavaşlamanın yaşanmaması bakımından; DİNAMİK AD TANIMLAMASI kullanmanızda yarar var.
Konu hakkında biraz araştırma yapmanızı önermeliyim.
DİNAMİK AD TANIMLAMASI ile, formüllerinizde sadece veri olan satırların dikkate alınmasını sağlayabilirsiniz.

NOT: Aşağıdaki formülün nihai şekli 10 numaralı cevapta.

VBA:
You must log in to view
(6 satır)
 
Merhaba Sayın @ycicek .

Sorunuz ilk bakışta çok karmaşık görünüyor.
İsterseniz tüm koşulları birden dikkate almak yerine işlemi adım adım ilerletelim.

Anladığım kadarıyla B4:B19 arasına herbir personel için A, B, C, .. gibi vardiyayı temsil eden harf elle yazılıyor.
Alt taraftaki listeden de izin/rapor/sendika izni, hafta tatili bilgisi kontrol edilmesi gerekiyor.

Buna göre; D14 hücresine aşağıdaki formülü uygulayıp sağa ve aşağı doğru kopyaladığınızda elde edilen sonuç istediğiniz gibi bir sonuç mudur?

Formülde kontrol edilen verilerin öncelik sırasına göre
(izinliyse HT yazılmaz ise Yİ önce HT satırı sonra yazılmalı,
sendika izniyle rapor aynı tarihi kapsıyorsa S yazılmalı .... gibi öncelik sırasından söz ediyorum
)
satırların yerlerini değiştirebilirsiniz.

Verdiğim formüldeki öncelik sıralaması S, Yİ, R, HT, VARDİYA şeklinde.

Bir de son bir hatırlatma; formüllerinizde 1.000.000 satırlık alanı kullanıyorsunuz.
Böyle bir formül yapısı belgenizin yavaş çalışmasına neden olur.
Bu yavaşlamanın yaşanmaması bakımından; DİNAMİK AD TANIMLAMASI kullanmanızda yarar var.
Konu hakkında biraz araştırma yapmanızı önermeliyim.
DİNAMİK AD TANIMLAMASI ile, formüllerinizde sadece veri olan satırların dikkate alınmasını sağlayabilirsiniz.
VBA:
You must log in to view
(6 satır)


Sn @Ömer BARAN üstadım haklısınız "Personel Listesi" sayfasına personel çalışacağı TM, vardiya sırası ( A,B,C... gibi ) veriler manuel olarak girilmekte,
"Vardiya" sayfasına çizelge altına veriler buradan geliyor. Yukarıda Terfi Merkezi Değiştirildiğinde Personel Listesi Değiştiği İçin çizelgedeki veriler değişiyor..

İzinler ile alakalı konu görünüşe göre çözüldü. İkinci ve en önemli konu

Başlangıç Vardiya buna ihtiyaç duymamızın sebebi bir önceki ayın son günü hangi vardiyada ise oradan devam etmesi o yüzden başlangıç vardiyaya maneel giriş yapıyorum yukarıdan veriler çizelgeye geldiğinde sırası ile son güne kadar vereceğimiz sıralamayla,

Her hafta vardiya değişikliği olacak. vardiya sıralaması şu şekilde;

İlk hafta 16-24 çalışan personel ikinci hafta 08-16 üçüncü hafta 24-08 sonra başa dönüyor.

Bazı noktalarda 4 personel bazılarında 5 bazılarında 6 personel olabilmekte. Genel de 4 personel var.

4 personel olduğunda A ve D İzin günleri haricinde aynı vardiyada 2 kişi çalışıyor.
5 personel olduğunda B ve E İzin günleri haricinde aynı vardiyada 2 kişi çalışıyor.
6 personel olduğunda C ve F İzin günleri haricinde aynı vardiyada 2 kişi çalışıyor.

buna göre bir kurgu yapabilir miyiz?

Dinamik ad tanımlaması konusundaki önerinize hemen bakıyorum. Teşekkür ederim Sn. @Ömer BARAN 🙏

Saygılarımla.
 
Sayın @ycicek .

Verdiğim formülün son satırını aşağıdakiyle değiştirerek deneme yapar mısınız?
Böylece Pazartesi'nden Pazartesi'ye vardiya değişimi sağlanmış olur.
Formülde, işlem HAFTASAY işlevi üzerinden yapıldığından, B14:B19 arasına başlangıç vardiya harfini 1 kez yazmanız yeterli olacaktır.
Örneğin O2 birleştirilmiş hücresindeki BAŞLANGIÇ TARİHİ'ni değiştirerek (farklı haftaya denk gelmek üzere) formül sonuçlarına bakarsanız,
vardiya türüne A yazılmış olsa da ayın 15'indeki (ve dolayısıyla devamındaki) vardiya türünün değiştiğini görebilirsiniz.

KAYDIR($D$5;;MOD(HAFTASAY(D$12;2)+KAÇINCI($B14;$D$4:$K$4;0)-1;4)*2))))))
 
Sayın @ycicek .

Verdiğim formülün son satırını aşağıdakiyle değiştirerek deneme yapar mısınız?
Böylece Pazartesi'nden Pazartesi'ye vardiya değişimi sağlanmış olur.
Formülde, işlem HAFTASAY işlevi üzerinden yapıldığından, B14:B19 arasına başlangıç vardiya harfini 1 kez yazmanız yeterli olacaktır.
Örneğin O2 birleştirilmiş hücresindeki BAŞLANGIÇ TARİHİ'ni değiştirerek (farklı haftaya denk gelmek üzere) formül sonuçlarına bakarsanız,
vardiya türüne A yazılmış olsa da ayın 15'indeki (ve dolayısıyla devamındaki) vardiya türünün değiştiğini görebilirsiniz.


Üstadım vardiya değişikliği her personel için hafta tatilinden sonraki gün başlıyor. Vardiya Örnek.jpeg'e bakarsanız anlatmak istediğimi daha iyi anlarsınız zira ben anlatamıyorum. Yukarıdaki ABCDEF verileri vardiya başladığı ilk günü manuel girebilmek adına bir önceki ayın son gününden devam etmesi için.

Vardiya sıralaması farklı bir alana yazıp oradan çeksek daha doğru olur kanaatindeyim sıralama şöyle 16-24*6 HT*1 08-16*6 HT*1 24-08*6 HT*1 sonra başa dönüp tekrar 16-24 vardiya sıralaması her personel için aynı şekilde dönüyor.
 
Formüledeki aynı kısmı bir de aşağıdakiyle değiştirerek deneyin isterseniz.
Bakalım hangisi kullandığınızda istediğinize daha uygun sonuç alacaksınız.



.
Üstadım her ikisi de istediğim sonucu almıyor. D14 D15 D16 D17 D18 ve D19 yukarıda manuel girdiğim değerleri alması lazım. Sonraki Hücreler D14 için konuşuyorum soldan sağa doğru D14 16-24 ise öyle devam etmeli E14de 16-24 olmalı HT'ye kadar HT'den sonraki hücre HT'nin bir önceki hücresine bakmalı 16-24 ise 08-16 devam edeyim demeli.
 
Hafta Tatiline göre değişim işine uygun olduğumda tekrar bakarım.
B sütununa yazdığınız harfe göre başlama işi yılın ilk haftası için gerçekleşir.
Yani yılın en başında B sütunundaki harfi 1 kez yazıp kullanılabilir.
İlerleyen tarihlerde HAFTA NUMARASIna göre değişim gerçekleşir.
Ay'ın bir önemi kalmaz ve dolayısıyla bir önceki ay kaldığı yerden sistem devam eder.
 
Hafta Tatiline göre değişim işine uygun olduğumda tekrar bakarım.
B sütununa yazdığınız harfe göre başlama işi yılın ilk haftası için gerçekleşir.
Yani yılın en başında B sütunundaki harfi 1 kez yazıp kullanılabilir.
İlerleyen tarihlerde HAFTA NUMARASIna göre değişim gerçekleşir.
Ay'ın bir önemi kalmaz ve dolayısıyla bir önceki ay kaldığı yerden sistem devam eder.

Teşekkür ederim Hocam Kıymetli zamanınızı ayırdığınız için. 🙏
 
Sayın @ycicek .

D14'e uygulayıp sağa ve aşağı doğru kopyalacağınız formül olarak aşağıdaki formülü oluşturdum.
O2 'deki tarih yılın ilk haftasındaki bir gün olduğunda, B14:B19 arasına yazılan vardiya türüne göre sonuç verir ve
izleyen tarihlerde her kişinin kendi hafta tatili gününde vardiya türü, 5'inci satırdaki seçime göre her hafta değiştirilir.

Belgenizde mevcut formüllerde kullanılan 1.000.000 satır / 6-7 sütunluk alan başvurularının yerine AD TANIMLAMALARI ekledim.
Mevcut formüllerinizi incelemedim,
sadece alan başvurularını DİNAMİK yapıya kavuşturdum ve sütun adına göre adlandırdım (PL_B, PL_C gibi sayfa adı ve sütun adı şeklinde).
Mevcut formüllerinizi de buna göre güncelledim.

Sürpriz olarak da eklediğim belgedeki D14-AH19 aralığındaki formüllerde göreceğiniz son bir AD TANIMLAMASI daha ekledim.
Bu ad tanımlamasında (BRN adını verdim) aşağıdaki formül kullanıldı.
Belgenizde doğrudan aşağıdaki formülü veya eklediğim belgedeki gibi de kullanabilirsiniz.
.
VBA:
You must log in to view
(6 satır)

.
 

Ekli dosyalar

Çözüm
Sayın @ycicek .

D14'e uygulayıp sağa ve aşağı doğru kopyalacağınız formül olarak aşağıdaki formülü oluşturdum.
O2 'deki tarih yılın ilk haftasındaki bir gün olduğunda, B14:B19 arasına yazılan vardiya türüne göre sonuç verir ve
izleyen tarihlerde her kişinin kendi hafta tatili gününde vardiya türü, 5'inci satırdaki seçime göre her hafta değiştirilir.

Belgenizde mevcut formüllerde kullanılan 1.000.000 satır / 6-7 sütunluk alan başvurularının yerine AD TANIMLAMALARI ekledim.
Mevcut formüllerinizi incelemedim,
sadece alan başvurularını DİNAMİK yapıya kavuşturdum ve sütun adına göre adlandırdım (PL_B, PL_C gibi sayfa adı ve sütun adı şeklinde).
Mevcut formüllerinizi de buna göre güncelledim.

Sürpriz olarak da eklediğim belgedeki D14-AH19 aralığındaki formüllerde göreceğiniz son bir AD TANIMLAMASI daha ekledim.
Bu ad tanımlamasında (BRN adını verdim) aşağıdaki formül kullanıldı.
Belgenizde doğrudan aşağıdaki formülü veya eklediğim belgedeki gibi de kullanabilirsiniz.
.
VBA:
You must log in to view
(6 satır)

.


Üstadım gördüğüm kadarıyla bir sorun yok gibi gözüküyor gün içinde detaylı bakar yazarım emeğinize sağlık. Hakkınız ödenmez. 🙏
 
@Ömer BARAN Üstadım bir sorum daha var. Tarih 15.12.2020 olduğunda 31.12.2020 son tarih yaparak 15 günlük vardiya yapmış oluyor. Bunu yeni yıl için devam edebilir miyiz? 15 Aralık ile 14 Ocak şeklinde 2020'den 2021'e geçerken eksik kalıyor.
 
D12 hücresindeki formülü =$O$2+SÜTUN()-4 olarak değiştirip sağa doğru, AH sütununa kadar kopyalayın.

Ancak burada karşılaşılacak sorun HAFTASAY formülüyle ilgili olacak. Çünkü tüm vardiya türleri için (A,B,C...) 1 Ocak yılın 1'inci haftası
ancak 31 Aralık A, C ve D için 53'üncü, B için 54'üncü hafta. Zira HAFTASAY işlevinin ikinci değişkeni, kişinin tatil günü.
Yani Pazartesi-Pazar herkes için bir hafta değil. A vardiyasındaki Yasin ÇİÇEK için hafta Perşembe-Çarşamba (HT günü Çarşamba),
B vardiyasındaki Ali ÇETİN için ise hafta Cuma-Perşembe (HT günü Perşembe) şeklinde.

Bunun sonucu olarak 31 Aralık ve 1 Ocak gününe denk gelen vardiya türününün değişiminde tutarsızlık olabilir ,HT'de sorun olmaz.
Belki yardımcı bir sütun kullanarak çözüm bulunabilir, bakmak gerek. ;)


.
 
D12 hücresindeki formülü =$O$2+SÜTUN()-4 olarak değiştirip sağa doğru, AH sütununa kadar kopyalayın.

Ancak burada karşılaşılacak sorun HAFTASAY formülüyle ilgili olacak. Çünkü tüm vardiya türleri için (A,B,C...) 1 Ocak yılın 1'inci haftası
ancak 31 Aralık A, C ve D için 53'üncü, B için 54'üncü hafta. Zira HAFTASAY işlevinin ikinci değişkeni, kişinin tatil günü.
Yani Pazartesi-Pazar herkes için bir hafta değil. A vardiyasındaki Yasin ÇİÇEK için hafta Perşembe-Çarşamba (HT günü Çarşamba),
B vardiyasındaki Ali ÇETİN için ise hafta Cuma-Perşembe (HT günü Perşembe) şeklinde.

Bunun sonucu olarak 31 Aralık ve 1 Ocak gününe denk gelen vardiya türününün değişiminde tutarsızlık olabilir ,HT'de sorun olmaz.
Belki yardımcı bir sütun kullanarak çözüm bulunabilir, bakmak gerek. ;)


.

Aynen dediğiniz gibi oldu sanırım bunun çözümü 01-30 arası vardiya listesi hazırlamak. 15 ile 15 arası değil. Maalesef kamu kurumlarında maaş 15'inde ödendiğinden vardiya listeside 15-15 arası yapılıyor.
 
Ben olsam sistemi değiştirmem, yılın sonu geldiğinde HT olmayan günleri elle yazardım.
Ertesi ay olduğunda sol taraftan U ve devamı sütunlara formülü tekrar kopyalardım.
Dediğim gibi belki formüle edilebilir, bakacağım.
 
Yok, bence formüle ilave yapılmalı.
Nasıl olacağına bakacağım ama şöyle düşünüyorum.
Zaten sistemimiz ney? Her hafta bir sonraki vardiyaya geçiş.
O halde 8'inci sütundan itibaren vardiyayı, normal yolla değil 7 sütun gerideki vardiyanın bir sonrakine geçiş şeklinde ayarlamak mümkün olabilir.
 
Tamam sanırım.
Ne demişlerdi DEMOKRASİDE ÇARELER TÜKENMEZ.

-- AD TANIMLAMAsı üzerinden hücreye =BRN şeklindeki formülü uyguluyorsanız, AD TANIMLAMA kısmındaki formülü,
-- Bu AD TANIMLAMASInı değil de doğrudan formülü hücreye uygulayarak kullanıyorsanız da D14'deki formülü
aşağıdakiyle değiştirip sağa ve aşağı doğru kopyalayın.

Böylece süreklilik olayı TAM ve KESİN olarak çözülmüş oluyor diye düşünüyorum.
Size düşen sadece, kişilerin başlangıç vardiya harfini yazmak.

VBA:
You must log in to view
(6 satır)

.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Konuyu başlatan
Site Üyesi
Katılım
Konu Bilgi
Durum
Çözüldü 
Forum
Excel Formül Soruları
Başlangıç tarihi
Son yanıt tarihi
Cevaplar
30
Üst